swiftラーニング-プロパティ、メソッド、下付き
3318 ワード
ストレージのプロパティ
最も簡単な場合、特定のクラスまたは構造インスタンスの一部として、属性は定数または変数の値を格納します.記憶属性は、変数記憶属性(キーワードvar記述)と定数記憶属性(キーワードlet記述)に分けられる.
struct FixedLengthRange {
var firstValue: Int
let length: Int
}
var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)
// the range represents integer values 0, 1, and 2
rangeOfThreeItems.firstValue = 6
// the range now represents integer values 6, 7, and 8
定数構造インスタンスのストレージ属性
構造インスタンスを作成し、定数に割り当てると、変数プロパティとして宣言されても、このインスタンスのプロパティは変更できません.
let rangeOfFourItems = FixedLengthRange(firstValue: 0, length: 4)
// 0,1,2,3
rangeOfFourItems.firstValue = 6
// firstValue ,
参照タイプに属するクラス(class)は異なり、参照タイプのインスタンスを定数に割り当てると、インスタンスの変数属性を変更できます.
遅延ストレージ属性
遅延ストレージ属性とは、最初に呼び出されたときにその初期値が計算される属性です.属性宣言の前に@lazyを使用して遅延ストレージ属性を表示します.
class DataImporter {
/*
DataImporter 。
。
*/
var fileName = "data.txt"
//
}
class DataManager {11. @lazy
var importer = DataImporter()
var data = String[]()
//
}
let manager = DataManager()
manager.data += "Some data"
manager.data += "Some more data"
// DataImporter importer
@lazyが使用されているため、importerプロパティは最初にアクセスされたときにのみ作成されます.たとえば、プロパティfile Nameにアクセスする場合:
println(manager.importer.fileName)
// DataImporter importer
// "data.txt”
計算プロパティ
ストレージ属性に加えて、クラス、構造体、列挙は計算属性を定義し、計算属性は直接値を格納するのではなく、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()
varcenter: Point {
get{
let centerX = origin.x + (size.width / 2)
let centerY = origin.y + (size.height / 2)
return Point(x: centerX, y: centerY)
}
set(newCenter) {
origin.x = newCenter.x - (size.width / 2)
origin.y = newCenter.y - (size.height / 2)
}
}
}
var square = Rect(origin: Point(x: 0.0, y: 0.0),
size: Size(width: 10.0, height: 10.0))
let initialSquareCenter = square.center
square.center = Point(x: 15.0, y: 15.0)
println("square.origin is now at (\(square.origin.x), \(square.origin.y))")
// "square.origin is now at (10.0, 10.0)”
The Swift Programming Language中国語版(CocoaChina精校)
プロパティモニタ
プロパティモニタはプロパティ値の変化を監視し、応答します.プロパティが値を設定されるたびにプロパティモニタが呼び出され、新しい値が現在の値と同じ場合でも例外ではありません.遅延ストレージ属性以外のストレージ属性に属性モニタを追加するか、属性を再ロードすることで継承した属性(ストレージ属性と計算属性を含む)に属性モニタを追加できます.
プロパティに次のモニタを1つまたはすべて追加できます.
class StepCounter {
var totalSteps: Int = 0 {
willSet(newTotalSteps) {
println("About to set totalSteps to \(newTotalSteps)")
}
didSet {
if totalSteps > oldValue {
println("Added \(totalSteps - oldValue) steps")
}
}
}
}
let stepCounter = StepCounter()
stepCounter.totalSteps = 200
// About to set totalSteps to 200
// Added 200 steps
stepCounter.totalSteps = 360
// About to set totalSteps to 360
// Added 160 steps
stepCounter.totalSteps = 896
// About to set totalSteps to 896
// Added 536 steps