在 Swift 中,属性(Properties)是类、结构体和枚举中存储值的一种方式。Swift 支持存储属性和计算属性,以及属性观察器用于监控属性值的变化。以下是关于 Swift 属性的一些基本操作:

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