swift – 用于什么是KeyPath?

swift – 用于什么是KeyPath?,第1张

概述在 Swift 4中,许多基金会团队已经讨论过与Swift 3相比,使用keyPaths要容易得多.这引出了一个问题……什么是keyPath?说真的,我找不到任何明确的资源. Objective-C能够动态而不是直接引用属性.这些引用称为keypaths.它们与直接属性访问不同,因为它们实际上不读取或写入值,它们只是将其存放以供使用. 让我们定义一个名为Cavaliers的结构和一个名为Playe 在 Swift 4中,许多基金会团队已经讨论过与Swift 3相比,使用keypaths要容易得多.这引出了一个问题……什么是keyPath?说真的,我找不到任何明确的资源. Objective-C能够动态而不是直接引用属性.这些引用称为keypaths.它们与直接属性访问不同,因为它们实际上不读取或写入值,它们只是将其存放以供使用.

让我们定义一个名为CavalIErs的结构和一个名为Player的结构,然后创建每个结构的一个实例:

// an example structstruct Player {    var name: String    var rank: String}// another example struct,this time with a methodstruct CavalIErs {    var name: String    var maxPoint: Double    var captain: Player    func goTomaxPoint() {        print("\(name) is Now travelling at warp \(maxPoint)")    }}// create instances of those two structslet james = Player(name: "Lebron",rank: "Captain")let irving = CavalIErs(name: "KyrIE",maxPoint: 9.975,captain: james)// grab a reference to the `goTomaxPoint()` methodlet score = irving.goTomaxPoint// call that referencescore()

最后一行创建了一个名为score的goTomaxPoint()方法的引用.问题是,我们不能创建对队长名称属性的引用,但keypath可以做.

let nameKeyPath = \CavalIErs.namelet maxPointKeyPath = \CavalIErs.maxPointlet captainname = \CavalIErs.captain.namelet cavalIErsname = irving[keyPath: nameKeyPath]let cavalIErsMaxPoint = irving[keyPath: maxPointKeyPath]let cavalIErsnameCaptain = irving[keyPath: captainname]

请使用Xcode 9或功能快照进行测试.

总结

以上是内存溢出为你收集整理的swift – 用于什么是KeyPath?全部内容,希望文章能够帮你解决swift – 用于什么是KeyPath?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1036308.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存