我认为我的部分问题是因为 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'

@objc 添加到 var 声明只是告诉我不能在 Objective-C 中引用 APISession。这似乎导致要求我向 Obj-C 公开我想使用此工具的每个类/变量,这似乎是倒退——据我所知,这是一个较新的功能,这很奇怪Apple 不会让它在 Swift 中原生运行。对我来说,这表明我在某处以某种方式误解或误用了某些东西。

最佳答案

根据 docs :



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

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

最后,当您在 Xcode 中键入 #keyPath 时,自动完成功能会告诉您它正在等待 @objc property sequence

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

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

关于ios - 如何在 Swift 4 中使用 #keyPath()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47361685/

10-13 03:01