1. 值類型與引用類型
- 結(jié)構(gòu)體和枚舉類型是值類型,類是引用類型铜秆。
- 引用類型具有同一性淹真,可以使用“===”來檢查兩個變量是否確實(shí)引用了同一個對象。
- 值類型不存在同一性的問題连茧。例如不能對一個變量判定是否與另一個變量持有相同的數(shù)字“2”核蘸,而判定他們是否都包含了數(shù)字2.
- “===”實(shí)際上是判定兩個變量是否持有相同的引用巍糯。在程序語言中,“==”通常被稱為結(jié)構(gòu)相等客扎,“===”被稱為指針相等或者引用相等祟峦。
- 在swift中,類引用并不是唯一的引用的類型徙鱼。swift中依然有指針宅楞,比如使用withUnsafeMutablePointer就會得到指針。
2. 淺復(fù)制(shallow copy)和深復(fù)制
- 淺復(fù)制會對引用進(jìn)行復(fù)制袱吆,但不會復(fù)制引用所指向的內(nèi)容
- 當(dāng)把一個值類型對另一個值類型進(jìn)行賦值的時候厌衙,對其中的引用類型所做的是淺復(fù)制。比如一個struct是一個值類型绞绒,但其可能包含各種類型迅箩,包括引用類型,當(dāng)將其賦值給其他值類型的時候处铛,其中的引用類型的關(guān)系被復(fù)制了饲趋,但內(nèi)容并未被復(fù)制,所以即使被復(fù)制的是常量撤蟆,他的引用關(guān)系不會變奕塑,但引用對象里的內(nèi)容還是可能會變化。
-
值語義(value semantics): 通過判斷是否是深復(fù)制家肯,來判斷是否具有值語義龄砰。
3. 函數(shù)
- 函數(shù)也是值,你可以將函數(shù)賦值給一個變量讨衣,或者作為數(shù)組的元素存在换棚。
- 函數(shù)是引用類型。
- 定義在類中或者協(xié)議中的函數(shù)被稱為方法反镇。方法都有一個隱式的參數(shù)self固蚤。
- 柯里化函數(shù):如果一個函數(shù)不是接收多個參數(shù),而只是一部分參數(shù)歹茶,并且返回一個接受其余參數(shù)的函數(shù)的話夕玩,這個函數(shù)就叫做柯里化函數(shù)。
- 自由函數(shù):不是方法的函數(shù)惊豺。
- 靜態(tài)派發(fā)和動態(tài)派發(fā):自由函數(shù)和在結(jié)構(gòu)體上調(diào)用的方法是靜態(tài)派發(fā)的燎孟。對于這些函數(shù)的調(diào)用,在編譯的時候已經(jīng)確定尸昧。類或者協(xié)議上的方法是動態(tài)派發(fā)的揩页。編譯器在編譯的時候不需要知道哪個函數(shù)將被調(diào)用。
4. Swift編程風(fēng)格指南
- 優(yōu)先選擇結(jié)構(gòu)體而不是類烹俗,除非你必須使用到類的引用特性爆侣。
- 除非你的設(shè)計就是為了類被繼承萍程,否則所有的類都應(yīng)該加上final關(guān)鍵字。
- 使用guard來確保提前退出方法累提。
- 盡量使用不可變值,除非你需要某個值改變磁浇,否則都應(yīng)該使用let斋陪。