属性

2018-08-23  本文已影响0人  张_何

存储属性

struct FixedLengthRange {
    var firstValue: Int
    let length: Int
}
var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)
rangeOfThreeItems.firstValue = 6
rangeOfThreeItems.length = 4  // 编译器报错,因为length不能被修改
let rangOfTwoItems = FixedLengthRange(firstValue: 0, length: 2)
rangOfTwoItems.firstValue = 2 //编译器会报错,因为rangOfTwoItems是一个常量

计算属性

class personal {
    var totalSteps: Int {  // 注意这里如果重写了set 或者 get 方法 ,就不能指定默认值了
        set{  //如果计算属性的 setter 没有定义表示新值的参数名,则可以使用默认名称 newValue
           totalSteps > newValue
        }
        get {
            return 2
        }
    }
}

属性观察器

class personal {
    var totalSteps: Int = 0 {
        willSet {
            print(newValue)
        }
        didSet {
            if totalSteps > oldValue {
                print(oldValue)
            }
        }
    }
}


类型属性

struct SomeStructure {
    static var storedTypeProperty = "Some value."
    static var computedTypeProperty: Int {
        return 1
    }
}
enum SomeEnumeration {
    static var storedTypeProperty = "Some value."
    static var computedTypeProperty: Int {
        return 6
    }
}
class SomeClass {
    static var storedTypeProperty = "Some value."
    static var computedTypeProperty: Int {
        return 27
    }
    class var overrideableComputedTypeProperty: Int {
        return 107
    }
}

获取和设置类型属性的值

类型属性是通过类型本身来访问,而不是通过实例。比如:
print(SomeStructure.storedTypeProperty)
SomeStructure.storedTypeProperty = "Another value."

上一篇 下一篇

猜你喜欢

热点阅读