gpt4 book ai didi

swift - KeyPath 的用途是什么?

转载 作者:IT王子 更新时间:2023-10-29 05:35:43 26 4
gpt4 key购买 nike

在 Swift 4 中,Foundation 团队的许多人都讨论过与 Swift 3 相比,使用 keyPaths 要容易得多。这引出了一个问题……什么是 keyPath?说真的,我找不到任何明确的资源。

最佳答案

Objective-C 能够动态引用属性,而不是直接引用。这些引用称为键路径。它们与直接属性访问不同,因为它们实际上并不读取或写入值,它们只是将其存储起来以备使用。

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

// an example struct
struct Player {
var name: String
var rank: String
}

// another example struct, this time with a method
struct 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 structs
let james = Player(name: "Lebron", rank: "Captain")
let irving = Cavaliers(name: "Kyrie", maxPoint: 9.975, captain: james)

// grab a reference to the `goTomaxPoint()` method
let score = irving.goTomaxPoint

// call that reference
score()

最后几行创建了对名为 score 的 goTomaxPoint() 方法的引用。问题是,我们无法创建对船长姓名属性的引用,但 keypath 可以。

let nameKeyPath = \Cavaliers.name
let maxPointKeyPath = \Cavaliers.maxPoint
let captainName = \Cavaliers.captain.name
let cavaliersName = irving[keyPath: nameKeyPath]
let cavaliersMaxPoint = irving[keyPath: maxPointKeyPath]
let cavaliersNameCaptain = irving[keyPath: captainName]

请使用 Xcode 9 或支持的快照进行测试。

关于swift - KeyPath 的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44447032/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com