Swift 5 新特性之二 Identity key path

在理解身份特征路径(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>, 因为它可以用来修改可变值,但其不能修改不可变的引用。

更多

获取更多内容请关注微信公众号豆志昂扬:

  • 直接添加公众号豆志昂扬
  • 微信扫描下图二维码;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章