Для чего используется KeyPath?
в Swift 4 многие команды фонда обсудили, насколько легче использовать keyPaths по сравнению с Свифт 3. Напрашивается вопрос... Что такое путь? Серьезно, я не могу найти никаких четких ресурсов.
1 ответов
Objective-C имеет возможность ссылаться на свойство динамически, а не напрямую. Эти ссылки, называемые keypaths. Они отличаются от прямого доступа к свойствам, потому что они на самом деле не читают или пишут значение, они просто прячут его для использования.
давайте определим структуру под названием 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()
последние строки создают ссылку на метод goTomaxPoint (), называемый score. Проблема мы не можем создать ссылку на свойство имени капитана, но 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 или способный снимок.