微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Swift 个人学习笔记 - 09: 属性

文章纯粹是中文《The Swift Programming Language》的学习笔记,所以绝大部分的内容都是文中有的。本文是本人的学习笔记,不是正式系统的记录。仅供参考

以下还是有很多没看懂、不确定的地方,我会以“存疑”的注解指出。

在此感谢中文版翻译者,这极大地加快了 Swift 的学习速度。

本文地址:http://www.jb51.cc/article/p-badkhfnt-d.html

Reference:

原版:The Swift Programming Language
中文版:Swift 3 编程语言 - 属性

属性

属性可以分为计算属性存储属性两种。

  • 计算属性可以由 class,struct,enum 定义

  • 存储属性可以由 class,struct 定义

在类的内部,可以定义属性观察器,实现在属性变化前和变化后做相应的处理。

存储属性

使用 letvar 引入。

延迟存储属性

使用 lazy 关键字来修饰变量,则相应的属性在首次使用的时候才会去计算其值。比如说在类里面定义一个 lazy 类成员,那么这个成员直邮在首次访问的时候才会创建相应的实例。

需要注意的是:延迟存储属性本身并不是线程安全的

计算属性

提供一个 getter一个可选的 setter 来间接得到和设置相应的属性值。类似于 Objective-C 里面重载 getter 和 setter 的行为。以下是例子:

struct Rect {
    var origin = Point()
    var size = Size()
    var center: Point {
        get {
            ...
            return ...
        }
        set (newCenter) {    // 如果不显式指定变量名的话,则认为 “newValue”
            ...
        }
    }
}

如果只提供了 getter 就表示这是一个只读属性

属性观察

除了 lazy 属性之外,所有属性都可以观察,主要是 willSetdidSet 关键字。

class StepCounter {
    var totalSteps: Int = 0 {
        willSet (newTotalSteps) {    // 同理,认名为 “newValue”
            ...
        }
        didSet {
            ...        // 这里有一个认值 “oldValue”,用来标示老值
        }
    }
}

类型属性

这种属性,在所有同一类型的类的所有实例仅有一个拷贝。必须赋予一个认值,不可以使用 lazy 关键字。使用 static 关键字来标识。

原文地址:https://www.jb51.cc/swift/321907.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐