1. 存储属性:
存储属性用于存储常量或变量作为实例的一部分。它们可以是变量存储属性(var)或常量存储属性(let)。
struct Point {
var x: Double
var y: Double
}
var point = Point(x: 3.0, y: 4.0)
print("X: \(point.x), Y: \(point.y)")
2. 计算属性:
计算属性用于提供一个 getter 和一个可选的 setter 以计算而得的值。
struct Circle {
var radius: Double
var diameter: Double {
get {
return radius * 2
}
set(newDiameter) {
radius = newDiameter / 2
}
}
}
var circle = Circle(radius: 5.0)
print("Radius: \(circle.radius), Diameter: \(circle.diameter)")
circle.diameter = 12.0
print("New Radius: \(circle.radius), New Diameter: \(circle.diameter)")
3. 属性观察器:
属性观察器用于监控属性值的变化。它们包括 willSet 在属性值被设置之前调用,以及 didSet 在属性值被设置之后调用。
class StepCounter {
var totalSteps: Int = 0 {
willSet(newTotalSteps) {
print("About to set totalSteps to \(newTotalSteps)")
}
didSet {
if totalSteps > oldValue {
print("Added \(totalSteps - oldValue) steps")
}
}
}
}
let stepCounter = StepCounter()
stepCounter.totalSteps = 100
stepCounter.totalSteps = 150
4. 懒加载属性:
懒加载属性只有在首次被访问时才会计算其初始值。这对于延迟加载耗时的操作很有用。
class DataLoader {
lazy var data: [String] = {
print("Loading data...")
return ["Data1", "Data2", "Data3"]
}()
}
let loader = DataLoader()
print(loader.data) // 在此时才会加载数据
5. 属性包装器:
属性包装器是一种管理属性的机制,可以在属性的声明中定义包装器以简化属性的代码。
@propertyWrapper
struct TrimmedString {
private(set) var value: String = ""
var wrappedValue: String {
get { return value }
set { value = newValue.trimmingCharacters(in: .whitespacesAndNewlines) }
}
init(wrappedValue: String) {
self.wrappedValue = wrappedValue
}
}
struct User {
@TrimmedString var username: String
@TrimmedString var bio: String
}
var user = User(username: " JohnDoe ", bio: " Swift Developer ")
print(user.username) // "JohnDoe"
print(user.bio) // "Swift Developer"
这些是一些基本的属性操作。Swift 的属性提供了丰富的功能,用于定义和使用属性以及处理属性值的变化。
转载请注明出处:http://www.zyzy.cn/article/detail/6851/Swift