結構體和類
值型別:結構體
、列舉
引用型別:類
使用類,我們可以通過繼承來共享程式碼。
結構體、列舉無法繼承
。正好符合swift的面相協議程式設計
的特性。
5.1值型別(value type)
定義:
將記憶體儲存在棧內(這句我百度的),持有者唯一的型別。 通俗的來說就是:值變數被複制時,本身會被複制,而不是引用被複制。 ps. 這裡講的比較抽象。前面在講迭代器的時候已經有講過了。忘卻的同學可以回頭看看~
使用場景:我們不用關心其生命週期
的優先使用值引用
結構體複製時
,只能改變它自己的複製,這個就叫做值語義 (value semantics)
對於類中的物件來說,它是通過傳遞引用
來工作了,所以可以有多個持有者。
值引用的優點:不可能存在迴圈引用!!!
(因為它只有一個持有者) 這個就很酷了,可以在專案中少很多考慮。
5.2可變性
很多bug的起因都是可變性引起的。
Swift 可以讓我們在寫出安全程式碼
的同時,保留直觀的可變程式碼的⻛格
///邊遍歷邊運算元組是危險的 這裡會崩潰
var mArray:NSMutableArray = [1,2,3,4,5,6,7,8]
for _ in mArray {
mArray.removeAllObjects()
}
///下面是安全的 removeAllObjects方法呼叫了8次
///因為不論如何移除,陣列的迭代器的複製依然持有最 開始的三個元素。
var array:[Int] = [1,2,3,4,5,6,7,8]
for _ in array {
mArray.removeAllObjects()
}
print(mArray.count) //0
複製程式碼