Swift 4)では、Foundationチームの多くの人が、Swift 3.と比較して、keyPathsの使用がどれほど簡単かについて話し合っています...これは疑問を投げかけます...何keyPathですか?真剣に、明確なリソースが見つかりません。
Objective-Cには、プロパティを直接ではなく動的に参照する機能があります。これらの参照は、キーパスと呼ばれます。これらは、実際に値を読み書きするのではなく、使用するために値を隠しておくだけなので、直接のプロパティアクセスとは異なります。
Cavaliersという構造体とPlayerという構造体を定義してから、それぞれのインスタンスを1つ作成しましょう。
// 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()メソッドへの参照を作成します。問題は、キャプテンのnameプロパティへの参照を作成できないことですが、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]
Xcode9または対応するスナップショットでテストしてください。