10:swift-属性
正文
/* 1: 属性 1.1:属性可以将值与特定的类、结构体或者是枚举联系起来。 1.2:存储属性会存储常量或变量作为实例的一部分,反之计算属性会计算(而不是存储)值。 1.3:计算属性可以由类、结构体和枚举定义。 1.4: 存储属性只能由类和结构体定义。 2: 存储属性 3: 延迟存储属性 lazy 4: 计算属性 get set 方法 5: 属性观察器 定义属性观察器来检查属性中值的变化,这样你就可以用自定义的行为来响应。 你可以在如下地方添加属性观察者: 你定义的存储属性; 你继承的存储属性; 你继承的计算属性。 6: 全局和局部变量 7: 类型属性 8:类型包装 */ import UIKit import Foundation class TenPropertyVC: UIViewController { var origin = CGPoint() var size = CGSize() // 1: 存储属性 get和set var center: CGPoint { get { let centerX = origin.x + size.width / 2 let centerY = origin.y + size.height / 2 return CGPoint(x: centerX, y: centerY) } // 如果一个计算属性的设置器没有为将要被设置的值定义一个名字,那么他将被默认命名为 newValue 。 set { origin.x = newValue.x - size.width / 2 origin.y = newValue.y - size.height / 2 } } /* 2: 属性观察者 你可以在如下地方添加属性观察者: 你定义的存储属性; 你继承的存储属性; 你继承的计算属性。 对于继承的属性,你可以通过在子类里重写属性来添加属性观察者。对于你定义的计算属性,使用属性的设置其来观察和响应值变化,而不是创建观察者。 willSet 会在该值被存储之前被调用。 didSet 会在一个新值被存储后被调用。 */ override func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor = .white self.title = "10:属性" var stepCounter = StepCounter() stepCounter.totalSteps = 1 // 调用willSet方法 let total = stepCounter.totalSteps // 调用didSet方法 print(total) // 类型属性,是类的属性,相当于加号方法,加号属性 print(StepCounter.classProperty) } } class StepCounter { /* 2: 属性观察者 你可以在如下地方添加属性观察者: 你定义的存储属性; 你继承的存储属性; 你继承的计算属性。 对于继承的属性,你可以通过在子类里重写属性来添加属性观察者。对于你定义的计算属性,使用属性的设置其来观察和响应值变化,而不是创建观察者。 willSet 会在该值被存储之前被调用。 didSet 会在一个新值被存储后被调用。 */ var totalSteps: Int = 0 { willSet(newData) { print("newValue=\(newData)") } didSet(oldData) { print("oldValue=\(oldData)") } } static var classProperty = "a" }