返回
Swift 属性与属性观察者详解
见解分享
2023-11-30 13:36:36
存储属性
存储属性是 Swift 类的基本属性类型,用于存储数据。存储属性可以是变量,也可以是常量。变量的属性值可以被修改,而常量的属性值不能被修改。存储属性的语法如下:
var name: String
let age: Int
计算属性
计算属性是通过其他属性的值计算出来的属性。计算属性不能存储数据,只能通过其他属性的值来计算出一个值。计算属性的语法如下:
var fullName: String {
return firstName + " " + lastName
}
延迟存储属性
延迟存储属性是延迟实例创建的属性。延迟存储属性的初始值是 nil,当第一次访问延迟存储属性时,才会实例化该属性。延迟存储属性的语法如下:
lazy var view: UIView = {
return UIView()
}()
类型属性
类型属性是与类关联的数据,而不是与类的实例关联。类型属性可以在类的实例中访问,也可以在类的类方法中访问。类型属性的语法如下:
static let sharedInstance = MyClass()
属性观察者
属性观察者允许你监视属性值的改变。属性观察者有两种类型:didSet
和 willSet
。didSet
属性观察者在属性值改变后被调用,而 willSet
属性观察者在属性值改变前被调用。属性观察者的语法如下:
var name: String {
didSet {
print("Name changed from \(oldValue) to \(name)")
}
}
属性包装器
属性包装器允许你自定义属性的行为。属性包装器可以用于验证属性值、加密属性值等。属性包装器的语法如下:
@propertyWrapper
struct Clamped<Value: Comparable> {
private var value: Value
private let range: ClosedRange<Value>
init(wrappedValue: Value, range: ClosedRange<Value>) {
self.value = wrappedValue
self.range = range
}
var wrappedValue: Value {
get { return value }
set { value = min(max(newValue, range.lowerBound), range.upperBound) }
}
}
@Clamped(range: 0...100)
var score: Int
@objc 和 dynamic 属性
@objc
属性允许你将 Swift 属性暴露给 Objective-C 代码。dynamic
属性允许你动态地改变属性的值,即使该属性是一个常量。@objc
和 dynamic
属性的语法如下:
@objc dynamic var name: String
关联属性
关联属性允许你将一个属性与另一个属性相关联。关联属性的语法如下:
class Person {
var name: String
var age: Int
weak var spouse: Person? {
didSet {
spouse?.spouse = self
}
}
}
结论
Swift 的属性和属性观察者提供了灵活的方式来存储和管理数据。通过使用属性观察者,你可以监视属性值的改变,并采取相应的操作。通过使用属性包装器,你可以自定义属性的行为。通过使用 @objc
和 dynamic
属性,你可以将 Swift 属性暴露给 Objective-C 代码。通过使用关联属性,你可以将一个属性与另一个属性相关联。