返回
Swift进阶教程(三):深入探索属性
IOS
2023-12-02 07:21:12
深入 Swift 属性
Swift中的属性是类、结构体和枚举类型的数据成员。它们用于存储与实例相关的数据,并提供访问和操作这些数据的机制。属性可以是存储属性、计算属性、延迟存储属性、类型属性或观察器。
存储属性
存储属性是作为实例一部分存储在内存中的常量或变量。它们由var(变量存储属性)或let(常量存储属性)引入。
变量存储属性
变量存储属性可以修改其值,如下所示:
struct Point {
var x: Int
var y: Int
}
var point = Point(x: 10, y: 20)
point.x = 15 // 修改变量属性
常量存储属性
常量存储属性的值在初始化后不能被修改,如下所示:
struct Rectangle {
let width: Int
let height: Int
}
let rectangle = Rectangle(width: 10, height: 20)
//rectangle.width = 15 // 错误:常量属性不能修改
计算属性
计算属性是根据其他属性或常量计算得出的属性。它们没有存储的属性,而是通过get访问器方法计算得出。
struct Circle {
var radius: Double
var area: Double {
return Double.pi * radius * radius
}
}
let circle = Circle(radius: 5.0)
print(circle.area) // 输出:78.53981633974483
延迟存储属性
延迟存储属性是在第一次访问时才初始化的属性。它们使用lazy关键字引入。
struct Person {
lazy var fullName: String = {
return "\(firstName) \(lastName)"
}()
var firstName: String
var lastName: String
}
let person = Person(firstName: "John", lastName: "Smith")
print(person.fullName) // 输出:John Smith
类型属性
类型属性是与类型本身关联的属性,而不是特定实例。它们使用static关键字引入。
class MyClass {
static var sharedInstance: MyClass = MyClass()
}
let instance = MyClass.sharedInstance // 访问类型属性
观察器
观察器是当属性值发生变化时触发的代码块。它们使用willSet和didSet关键字引入。
struct User {
var name: String {
willSet {
print("即将修改 name 为 \(newValue)")
}
didSet {
print("已修改 name 为 \(name)")
}
}
}
var user = User(name: "John")
user.name = "Mary"
// 输出:
// 即将修改 name 为 Mary
// 已修改 name 为 Mary
结论
Swift中的属性提供了强大的机制来存储、计算和操作数据。了解不同类型的属性及其用法对于有效地设计和实现Swift代码至关重要。通过熟练掌握属性,您可以编写可维护、高效且可扩展的应用程序。