KeyPath
在Swift3.0中KeyPath其實(shí)都是String只泼,且使用KeyPath使用KVC時(shí)候得到的是Any對(duì)象
在Swift4.0中KeyPath用對(duì)象進(jìn)行了封裝静汤,定義如下:
/// A key path from a specific root type to a specific resulting value type.
public class KeyPath<Root, Value> : PartialKeyPath<Root> {
}
以下面這個(gè)對(duì)象為例
下面的KeyPath是獲取Kid對(duì)象的nickname屬性
KeyPath開始都是以""開始筹吐,緊跟著是要使用KeyPath的對(duì)象的類型俯邓,后面跟著".屬性名"來形成完整的KeyPath
- KeyPath支持對(duì)象屬性的屬性
- KeyPath支持Optional屬性的屬性
- KeyPath支持下標(biāo)屬性
KeyPath的拼接
KeyPath支持兩個(gè)KeyPath對(duì)象的拼接,條件是拼接的KeyPath的value類型等于被拼接的KeyPath的Root類型
KeyPath的種類
其中KeyPath為只讀的KeyPath
WritableKeyPath為針對(duì)Mutable Value Type使用的KeyPath
ReferenceWritableKeyPath為針對(duì)引用的可寫的類型使用的KeyPath
KVO
由于上面的新的KeyPath,則KVO也發(fā)生了新的變化:
最大的變化就是在調(diào)用KVO方法的時(shí)候就可以傳進(jìn)回調(diào)方法
Archival and serialization 歸檔和序列化
可以通過指定Swift 類型(class, enum, struct)實(shí)現(xiàn)Codable協(xié)議來標(biāo)識(shí)該類型支持歸檔和序列化。
大部分情況下芍秆,如果某個(gè)類型的所有成員類型都實(shí)現(xiàn)了Codeable協(xié)議的話,只需要這一步就可以完成對(duì)該類型的數(shù)據(jù)的歸檔和序列化功能的支持翠勉,因?yàn)榫幾g器會(huì)自動(dòng)生成相應(yīng)的encode\decode方法妖啥,當(dāng)然你也可以重寫這些方法。
Codable其實(shí)是一個(gè)組合協(xié)議:
public typealias Codable = Decodable & Encodable
自定義歸檔和序列化的key
實(shí)現(xiàn)以上的private enum并賦值自定義key
歸檔和序列化錯(cuò)誤處理
通過捕獲DecodingError錯(cuò)誤來處理对碌,其中包含了keyNotFound valueNotFound typeMismatch dataCorrupt等錯(cuò)誤