Swift 属性
封面图
•
2025-10-22
•
Swift
0
0
0
0
在 Swift 中,**属性(Properties)** 是用于存储和管理值的机制。Swift 提供了多种类型的属性,包括: --- ## 一、属性的基本概念 属性是与类(class)、结构体(struct)、枚举(enum)相关联的值或变量。 Swift 中的属性分为两类: ### 1. **存储属性(Stored Properties)** - 存储实际的值。 - 可以是常量(`let`)或变量(`var`)。 ```swift struct Person { var name: String let age: Int } ``` ### 2. **计算属性(Computed Properties)** - 不存储值,而是通过 getter 和 setter 来动态计算值。 ```swift struct Rectangle { var width: Double var height: Double var area: Double { get { return width * height } set { width = newValue / height } } } ``` --- ## 二、属性观察器(Property Observers) 可以使用 `willSet` 和 `didSet` 来观察和响应属性值的变化。 ```swift var someNumber: Int = 0 { willSet { print("即将设置为:$newValue)") } didSet { print("已设置为:$oldValue) -> $someNumber)") } } ``` --- ## 三、类型属性(Type Properties) 属于类型本身,而不是实例。使用 `static`(对于 struct 和 enum)或 `class`(对于 class)来声明。 ```swift class SomeClass { static var storedProperty = "Hello" static var computedProperty: String { return "World" } } ``` --- ## 四、延迟存储属性(Lazy Stored Properties) 只在第一次访问时才初始化,适用于开销较大的初始化操作。 ```swift class DataImporter { var data: String = "Loaded data" } class DataManager { lazy var importer = DataImporter() var data: [String] = [] } ``` --- ## 五、属性包装器(Property Wrappers)(Swift 5.1+) 允许你封装属性的访问逻辑,比如验证、日志、缓存等。 ```swift @propertyWrapper struct Restrict { private var value: Int init(wrappedValue: Int) { self.value = wrappedValue } var wrappedValue: Int { get { return value } set { value = max(0, min(100, newValue)) } // 限制范围 } } struct User { @Restrict var score: Int = 50 } ``` --- ## 六、总结表格 | 属性类型 | 是否存储值 | 是否可计算 | 是否属于类型 | 示例 | |----------------|-------------|-------------|----------------|----------------------------------| | 存储属性 | ✅ | ❌ | ❌ | `var name: String` | | 计算属性 | ❌ | ✅ | ❌ | `var area: Double` | | 类型属性 | ✅ | ❌ | ✅ | `static var count: Int` | | 延迟存储属性 | ✅ | ❌ | ❌ | `lazy var data = ...` | | 属性包装器 | ✅ | ✅ | ❌ | `@Restrict var score: Int` | --- 如果你有具体的使用场景或问题,我可以进一步解释!
上一篇:
Swift 方法
下一篇:
Swift 类型转换
标题录入,一次不能超过6条
返回顶部
留言
留言
评论