在理解身份特徵路徑(Identity key path)之前,必須要對key path有清晰的認識,如key path的基本定義,ReferenceWritableKeyPath和WritableKeyPath的關係,如何把兩個key path結合起來使用等。如有疑惑可以參看這裏。
Identity key path - 身份特徵路徑?
提案出處:
https://github.com/apple/swift-evolution/blob/master/proposals/0227-identity-keypath.md
細節
在Swift中每個值都有一個特別的屬性.self, 我們使用它來獲取整個值。
從兼容Cocoa KVC考慮的話,身份特徵路徑(Identity key path)對應 @“self”。
var value = \Int.self
var height = 1
print(height[keyPath: value]) // 1
height[keyPath: value] = 5
print(height[keyPath: value]) // 5
以此類推,我們可以通過 .self 來訪問 self 本身。
let id = \Int.self
x[keyPath: id] = 3
print(x[keyPath: id]) // 輸出3
struct Employee {
var name: String
var position: String
}
func updateValue(of vc: ValueController<Employee>) {
vc[\.self] = Employee(name: "Cassius Green", position: "Power Caller")
}
身份特徵路徑(identity key path) 其實是一個WritableKeyPath<T, T>, 因爲它可以用來修改可變值,但其不能修改不可變的引用。
更多
獲取更多內容請關注微信公衆號豆志昂揚:
- 直接添加公衆號豆志昂揚;
- 微信掃描下圖二維碼;