SwiftProperty Swift3.0属性
4276 ワード
Swift Peoperty
Swiftには以下の属性があります
ストレージのプロパティ
ストレージ・プロパティは、クラスまたは構造体のインスタンスの一部として、定数と変数を格納する最も簡単なプロパティです.
ストレージ・プロパティについては、次の点があります.
struct FixedLengthRange {
var firstValue: Int //
let length: Int //
}
var item1 = FixedLengthRange(firstValue: 10, length: 10)
let item2 = FixedLengthRange(firstValue: 10, length: 10)
//item2.firstValue = 6 // :
計算プロパティ
計算プロパティは実際の値を格納するのではなく、getterとオプションの[setterを間接的に取得して他のプロパティを設定する]を提供します.
計算プロパティについては、次の点があります.
struct Point {
var x = 0.0, y = 0.0
}
struct Size {
var width = 0.0, height = 0.0
}
struct Rect {
var origin = Point()
var size = Size()
var center:Point { //
get {
let centerX = origin.x + (size.width / 2)
let centerY = origin.y + (size.height / 2)
return Point(x: centerX, y: centerY)
}
set(newCenter) { // , newValue
origin.x = newCenter.x - size.width / 2
origin.y = newCenter.y - size.height / 2
}
}
var maxX:Float { // , get{}
return Float(origin.x) + Float(size.width)
}
}
var square = Rect(origin:Point(x: 0.0, y: 0.0), size:Size(width:100, height:100))
let initialSquareCenter = square.center
square.center = Point(x: 15.0, y:15.0)
square.maxX
タイプのプロパティ
タイプ属性は、タイプのインスタンスではなくタイプに関連付けられます.-タイプに関連してオブジェクトに関連しないタイプ(
class
)のすべてのインスタンスについて、タイプ(class
)プロパティにはコピーが1つしかありません.値タイプ(struct
)では、ストレージタイププロパティと計算タイププロパティを定義できます.クラス(class
)では、計算タイプ(setter
)のプロパティしか定義できません.インスタンスのプロパティとは異なり、ストレージタイプ(getter
)のプロパティにデフォルト値を設定する必要があります.これは、タイプがタイプ属性を初期化する方法がないためです.タイプ属性へのアクセスと設定はインスタンス属性と同様であり、タイプ属性はタイプによって取得され、設定され、タイプのインスタンスではありません.
キーワード:class static
struct AudioChannel {
static let threaholdLevel = 10
static var maxInputLevelForAllChannels = 0
var currentLevel:Int = 0 {
didSet{
if currentLevel > AudioChannel.threaholdLevel {
currentLevel = AudioChannel.threaholdLevel
}
if currentLevel > AudioChannel.maxInputLevelForAllChannels {
AudioChannel.maxInputLevelForAllChannels = currentLevel
}
}
}
}
var leftChannel = AudioChannel()
var rightChannel = AudioChannel()
leftChannel.currentLevel = 7
println(leftChannel.currentLevel) // 7
println(AudioChannel.maxInputLevelForAllChannels) // 7
rightChannel.currentLevel = 11
println(rightChannel.currentLevel) // 10
属性オブザーバ
プロパティオブザーバは、プロパティ値の変化をリスニングおよび応答するために使用されます.アトリビュート値を設定するたびに、新しい値と古い値が同じであっても、アトリビュートオブザーバメソッドが呼び出されます.怠惰なストレージ属性を除いて、任意のストレージ属性のプロパティオブザーバを定義できます.継承されたプロパティにオブジェクトをサブクラスに追加することもできます.
計算プロパティについては、計算プロパティのsetterでこの値の変化を直接観察し、応答できるため、プロパティオブザーバーを定義する必要はありません.
観察者を定義するには、以下の観察方法を設定します.
willSetとdidSetは、プロパティが最初に設定されたときにのみ呼び出され、初期化時にこれらのリスニングメソッドは呼び出されません.
転載する