属性

作者: 淡淡的Rui | 来源:发表于2020-08-25 12:13 被阅读0次

    属性分类

    计算属性可以用于类、结构体和枚举;存储属性只能用于类和结构体

    存储属性

    • 存储变量(var)、常量属性(let)
    • 延迟存储属性(lazy var):第一次调用时才会计算其初始值,常量无法声明成延迟属性

    计算属性

    • 不直接存储值,而是提供一个getter和一个可选的setter, 必须用 var 定义
    • 只读计算属性的声明可以去掉get关键字和花括号
    • 如果setter没有定义表示新值的参数名,则可以使用默认名称 newValue

    类型属性

    • 使用关键字static来定义类型属性
    • 在为类定义计算型类型属性时,可以改用关键字class
    • class不能修饰类的存储属性,static可以修饰类的存储属性
    • 跟实例的存储型属性不同,必须给存储型类型属性指定默认值
    
    
    class SomeClass {
        static var storedTypeProperty = "Some value."
        static var computedTypeProperty: Int {
            return 27
        }
        class var overrideableComputedTypeProperty: Int {
            return 107
        }
    }
    

    属性观察器

    • 可以为除了延迟存储属性之外的其他存储属性添加属性观察器
    • 也可以通过重写属性的方式为继承的属性(包括存储属性和计算属性)添加属性观察器
    • willSet观察器会将新的属性值作为常量参数传入,可以为这个参数命名或使用默认名称newValue
    • didSet观察器会将旧的属性值作为参数传入,可以为该参数命名或者使用默认参数名oldValue
    class StepCounter {
        var totalSteps: Int = 0 {
            willSet(newTotalSteps) {
                print("About to set totalSteps to \(newTotalSteps)")
            }
            didSet {
                if totalSteps > oldValue {
                    print("Added \(totalSteps - oldValue) steps")
                }
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:属性

          本文链接:https://www.haomeiwen.com/subject/vbgajktx.html