在Swift 4中如何使用#keyPath()?

Ron*_*gge 3 ios swift swift4

我认为部分问题是因为Swift 4改变了诸如@objc工作之类的方式。

有很多教程,具有很多不同的值,而且我无法在使用哪个版本的版本之间做出选择,以弄清楚如何使其在版本中工作。

let delegate = UIApplication.shared.delegate as! AppDelegate
delegate.addObserver(self, forKeyPath: #keyPath(AppDelegate.session), options: [], context: nil)
// Warning: Argument of #keyPath refers to non-'@objc' property 'session'
Run Code Online (Sandbox Code Playgroud)

添加@objc到var声明只是告诉我,无法在Objective-C中引用APISession。这似乎导致要求我将要使用此工具的每个类/变量公开给Obj-C的方法,而且似乎倒退了-据我了解,这是一个较新的功能,这很奇怪苹果不会让它在Swift中原生运行。对我来说,这表明我在某种程度上误解或误用了某些东西。

Mik*_*rne 6

根据文档

在Objective-C中,键是一个字符串,用于标识对象的特定属性。密钥路径是一串点分隔的密钥,用于指定要遍历的对象属性序列。

重要的#keyPath是,在标题为“与Objective-C API的交互”的部分中找到的讨论。KVO和KVC是Objective-C的功能。

文档中的所有示例均显示了从NSObject继承的Swift类。

最后,当您输入#keyPathXcode时,自动完成功能会告诉您期望输入@objc property sequence

在此处输入图片说明

使用输入的表达式#keyPath将由编译器检查(好!),但这不会消除对Objective-C的依赖。