Swift 物件屬性 (Properties)
屬性將值與特定的類別 (Class)、結構 (Struct) 或列舉 (Enum) 關聯起來。
儲存屬性 (Stored Properties)
這是最常見的形式,直接儲存一個常量或變數作為實例的一部分。
struct FixedLengthRange {
var firstValue: Int
let length: Int
}
var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)
延遲儲存屬性 (Lazy Stored Properties)
使用 lazy 關鍵字宣告。這些屬性直到第一次被存取時依才會被計算初始值。這對於初始化很耗時的操作 (如讀取設定檔、下載圖片) 非常有用。
lazy var importer = DataImporter()
Lazy 屬性必須宣告為變數 (
var),因為它在實例初始化完成後才可能被賦值。計算屬性 (Computed Properties)
這些屬性不直接儲存值,而是提供一個 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) {
origin.x = newCenter.x - (size.width / 2)
origin.y = newCenter.y - (size.height / 2)
}
}
}
屬性觀察者 (Property Observers)
你可以監聽屬性值的變化,並在變化前後執行程式碼。常用於 UI 更新。
willSet:值被儲存前呼叫。didSet:值被儲存後呼叫 (最常用)。
class StepCounter {
var totalSteps: Int = 0 {
willSet(newTotalSteps) {
print("即將設定為 \(newTotalSteps)")
}
didSet {
if totalSteps > oldValue {
print("增加了 \(totalSteps - oldValue) 步")
}
}
}
}
型別屬性 (Type Properties)
類似於其他語言的 static 變數。這些屬性屬於型別本身,而不是屬於某個實例。所有實例共享同一個型別屬性。
struct SomeStructure {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
return 1
}
}
print(SomeStructure.storedTypeProperty)