協(xié)議
設(shè)置協(xié)議后有自動補齊,而且是必實現(xiàn)骨田,不然會報錯的耿导。
Static、class
為了保證類與結(jié)構(gòu)體都能夠使用态贤,協(xié)議中必須用static定義類型方法舱呻、類型屬性、類型下標(biāo)
不為 static 會報錯
mutating
協(xié)議中的實例方法需要使用mutating來修飾
init
- 協(xié)議中還可以定義初始化器 init
- 非final類實現(xiàn)時必須加上required
- 從協(xié)議實現(xiàn)的初始化器悠汽,剛好是重寫了父類的指定初始化器
- 那么這個初始化必須同時加required箱吕、override
init、init?柿冲、init!
協(xié)議中定義的init?茬高、init!,可以用init假抄、init?怎栽、init!實現(xiàn)
協(xié)議中定義的init, 可以用init宿饱、init!去實現(xiàn)
協(xié)議的繼承
一個協(xié)議可以繼承其他協(xié)議(個人理解有點像分類)
協(xié)議組合
同時遵守多種條件
將協(xié)議寫成變量的方式
CaseIterable
讓枚舉遵守CaseIterable協(xié)議熏瞄,可以實現(xiàn)遍歷枚舉值
CustomStringConvertible
實現(xiàn)CustomStringConvertible協(xié)議后,print打印的函數(shù)為 description 的實現(xiàn)
實現(xiàn)CustomDebugStringConvertible協(xié)議后谬以,debugPrint打印的函數(shù)為 debugDescription 的實現(xiàn)
X.self 巴刻、 X.Type 、 AnyClass
X.self是一個元類型(metadata)的指針蛉签,metadata存放著類型相關(guān)信息
X.self 屬于X.Type類型
定義一種type
AnyClass等于AnyObject.Type 包含了所有類型
type(of: per) 等同于Person.self
看似是一個函數(shù)胡陪,但是不會使用到棧,說明進(jìn)行了優(yōu)化碍舍。
元類型的應(yīng)用
AnyObject.Self 等價于 [AnyObject class]
使用場景柠座,讓不同類型做相同的事情
或者為不知道的類型留下操作空間
Swift同樣可以使用Runtime的一些方法
如果一個Swift類,沒有繼承其他類片橡,這個類就被叫做 base類
但是其實在底層實現(xiàn)下妈经,base類也是有父類的:SwiftObject
很容易理解,編譯器為了滿足公共方法捧书,肯定是有一個公共類的