Swift 属性基本使用

存储属性

  • <类 枚举 结构体> 的常量或变量(有具体存储空间)
// 一般形式
let name = "panda"
var eat: String
var live: String = "chengdu" {
    willSet {
    }
    didSet {
    }
}
// 懒加载
 lazy var obj = NSObject()
 lazy var objfun: NSObject = { // 这里实现很像计算属性,但尾随闭包返回了一个 有存储空间的对象,对于该对象是存储属性
       let obj = NSObject()
       return obj
 }()

计算属性

  • <类 枚举 结构体> 属性函数(无存储空间)
// 如下 可以实现只读属性(get值恒不变,set值无效)
var name: String  { // name是两个函数(set get)
    get {
        return "panda" 
    }
    set {
       print(newValue)
    }
}
var name: String  { // get only 
    return "panda"
}
// 但将set get作用在一个存储属性上,就成了属性的快速get set方法了

// 子类重写父类属性
// father
var name: String = "dog"
// child
override var name: String {
       set {}
        get {
            return "cat"
        }
}

类属性

  • <类 枚举 结构体> 有初始值的存储属性 static修饰(很像全局)
    // 存储属性 (一定要有初始值, 因为没办法在初始化时赋值) 
    //  (延迟初始化,多线程也只会创建一次<用于单列实现>)
    static var name: String = "dog" 

全局和局部 变常量

域: <函数,结构(类 结构体 枚举)> 外 -> 全局, 内 -> 局部

存储属性

  • 全局变常量都是延迟加载(不使用lazy)
  • 局部变常量想延迟加载需要使用lazy修饰

计算属性

  • 使用没有区别
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容