static 和 class
在 Swift 中 Static
和 class
都是表示「類型范圍作用域」的關(guān)鍵字。
在所有類型(class酱畅、struct挪凑、enum )中使用 static
修飾都可以表示類方法類與屬性(包括存儲屬性和計算屬性)役衡。
class
是專門用在 calss 類型中修飾類方法和類的計算屬性(注意:無法使用 class
修飾存儲屬性)段化。
在 class 類型中 static 和 class 的區(qū)別
在 class 類型中 static
和 class
都可以表示類型范圍作用域嘁捷,那區(qū)別是什么?
-
class
無法修飾存儲屬性显熏,而static
可以雄嚣。 - 使用
static
修飾的類方法和類屬性無法在子類中重載。也就是說static
修飾的類方法和類屬性包含了final
關(guān)鍵字的特性喘蟆。相當于final class
缓升。
static 在 Protocol 中的使用
Swift 中 class,struct蕴轨,enum 都可以實現(xiàn)某個指定 protocol港谊。在 protocol定義一個類方法或者類計算屬性,顯而易見橙弱,應(yīng)該使用 static
關(guān)鍵字來修飾歧寺。使用 protocol 時,在 struct 和 enum 中仍然使用 static
棘脐,在 class 類型中 class
和 static
關(guān)鍵字都可以使用斜筐。
附:計算屬性和存儲屬性區(qū)別
計算型屬性
- 執(zhí)行函數(shù)返回其他內(nèi)存地址
- 計算型屬性本身不占用內(nèi)存空間
- 計算屬性可以用于類、結(jié)構(gòu)和枚舉里
- 不直接存儲值,而是用
get/set
來做.可用來操作其他屬性值的變化
var userName: String?
var nanme: String {
get {
return "miFanTongXie"
}
//set里面不能自己給自己賦值荆残,否則會導致死循環(huán)
set {
userName = newValue
}
}
存儲型屬性
- 需要開辟空間奴艾,以存儲數(shù)據(jù)
- 存儲屬性只能用于類和結(jié)構(gòu)體里