我一直试图弄清楚这一点,但无法理解 KVC 的优势,除了:
- 编译器检查(从而避免字符串类型的代码)
- 与 KVO 一起使用
我不确定除了上面提到的 2 个案例(我知道我可能错了)之外,使用 KVC 是否有任何优势,但我找不到一个!
就像考虑以下代码:
class Profile: NSObject {
@objc var firstName: String
var lastName: String
init(firstName: String,lastName: String) {
self.firstName = firstName
self.lastName = lastName
super.init()
}
}
let profile1 = Profile(firstName: "John", lastName: "Doe")
profile1.firstName // returns String "John"
profile1.value(forKey: "firstName") // returns Optional<Any>
let firstNameKey = \Profile.firstName
profile1[keyPath: firstNameKey] /* returns String "John" */
我的意思是我为什么要使用:
让 firstNameKey = \Profile.firstName
profile1[keyPath: firstNameKey] /* 返回字符串 "John" */
代替 :
profile1.firstName // 返回字符串“John”
如果有人有一些代码示例/示例,那么如果他们可以使用 swift 进行解释,那就太好了(因为我的 Objective-C 不好)