【发布时间】:2017-06-09 23:37:23
【问题描述】:
在 Xcode 9 Beta 中试用 Swift 4。
由于某种原因,我在 NSObject 上使用键值访问器时遇到了崩溃。
有什么想法吗?
import Cocoa
class Person: NSObject {
var name = ""
var age = 0
}
let alpha = Person()
alpha.name = "Robert"
alpha.age = 53
alpha.value(forKey: "name")
// error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0).
【问题讨论】:
-
如果你用
#keyPath(Person.name)而不是字符串调用value(forKey:),那么编译器将显示正确的错误消息并修复它! -
甚至,现在你在 Swift 4 中,使用 Swift 的键值编码机制
print(alpha[keyPath: \Person.name]):) 那么你不必从NSObject继承,甚至可以使@987654327 @一个struct. -
我正在使用键值编码从字符串变量中动态选择要访问的属性。有没有办法使用新的 Swift 4 机制来做到这一点?
-
@closetCoder 您可以存储和传递关键路径,例如
let name = \Person.name,但它们不是字符串(它们是强类型的)。字符串是表示键路径的弱类型,除非绝对必要,否则应该避免使用。您使用字符串键路径的用例是什么?