swift 属性

166 阅读2分钟

一、Swift中跟实例相关的属性可以分为2大类 

1、存储属性(Stored Property) 类似于成员变量这个概念 

存储在实例的內存中 结构体、类可以定义存储属性 枚举不可以定义存储属性

 2、计算属性( Computed Property) 本质就是方法(函数)

 不占用实例的内存 枚举、结构体、类都可以定义计算属性

二、关于存储属性,Swift有个明确的规定 

在创建类 或结构体的实例时,必须为所有的存储属性设置一个合适的初始值 

可以在初始化器里为存储属性设置一个初始值 可以分配一个默认的属性值作为属性定义的一部分

三、枚举原始值原理

 s .rawValue() 只读的计算属性

四、延迟存储属性

第一次用到属性的时候才会进行调用

必须是var

lazy var car = Car()

  lazy var image: Image = {
       return UIImage(named: "")
    }()

对于结构体 lazy 初始化时不能用let 拿到结构体lazy修饰属性

五、属性观察器

可以应用全局变量,局部变量

wiLlSet会传递新值,默认叫newValue
didSet会传递旧值,默认叫oldValue
在初始化器中设置属性值不会触发wil1Set和d idSet
在属性定义时设置初始值也不会触发wiLLSet和didSet

  var radius: Double {
        willSet {
            
        }
        didSet {
            
        }
    }

六、inout的本质

如果实参有物理内存地址,且没有设置属性观察器
直接将实参的内存地址传入函数(实参进行引用传递)
1如果实参是计算属性 或者 设置了属性观察器
采取了Copy Irt Copy Out的做法
(调用该函数时,先复制实参的值,产生副本 【get]
将副本的内存地址传入函数(副本进行引用传递),在函数内部可以修改副本的值
函数返回后,再将副本的值覆盖实参的值 【set)

七、类型属性

口类型属性(Type Property):只能通过类型去访问
存储类型属性(Stored Type Property):整个程序运行过程中,就只有1份內存(类似于全局变量)
计算类型属性 ( Computed Type Property)
可以通过static定义类型属性
口如果是类,也可以用关键字class

单利

class FileManager {

public static let shared = FileManager()

private init() {}

}