今天將講述Swift屬性以及剖析inout的本質, 若有興趣可點擊關注,之後會按期更新更有料的博客!!!函數
Swift中跟實例相關的屬性能夠分爲2大類spa
2. 計算屬性(Computed Property)3d
struct Circle { //存儲屬性 var radius: Double //計算屬性 var diameter: Double { set{ radius = newValue / 2 } get{ radius * 2 } } }
將針對例子講解上面的結論code
將結構體Struct改成類Class,以下server
解釋下爲何枚舉Enum不能夠定義存儲屬性?blog
上面說到計算屬性至關於函數方法的意思以下,先後二者徹底等價內存
存儲屬性: 關於存儲屬性,Swift有個明確的規定get
計算屬性: set傳入的新值默認爲newValue,也能夠自定義博客
枚舉的原始值rawValue的本質是隻讀計算屬性class
使用lazy能夠定義一個延遲存儲屬性, 在第一次用到屬性的時候纔會進行初始化
能夠爲非lazy的var存儲屬性設置屬性觀察器,也是存儲屬性
注意: 在初始化器中設置屬性值不會觸發willSet和didSet方法!!!
inout:輸入輸出參數的本質就是引用傳遞(地址傳遞)
經過inout查看彙編代碼:leap命令: 將地址傳入進去
inout本質總結:
若是實參有物理內存地址且沒有設置屬性觀察器:直接將實參的內存地址傳入函數(實參進行引用傳遞)
若是實參是計算屬性 或者 設置了屬性觀測器:採起了蘋果官方說的 Copy In Copy Out的作法