“使用未解析的标识符”将新的 Swift 2.2 语法用于隐式 setter 上的选择器

Mat*_*ler 4 swift

将我的代码迁移到 Swift 2.2,我有一个属性var activeTextField:UITextfield?,我使用的选择器是"setActiveTextField:". 此方法在我的 swift 代码中不明确存在。

使用新语法,#selector(setActiveTextField)不起作用:Use of unresolved identifier

我知道我可以使用,Selector("setActiveTextField:")但我会失去新的快速选择器的好处。

那么,这样做的新方法是什么?

ric*_*ter 5

这里的问题是您正在使用属性,而不是方法。这有两个问题:

  • 属性的 ObjC setter/getter 方法对在运行时生成。
  • #selector表达式需要一个 Swift 函数/方法引用。

当 Swift 编译你的源代码时,它不知道 ObjC-(UITextField*)activeTextField-(void)setActiveTextField:(UITextField*)field方法会存在,所以它不能为它们生成函数引用。由于它无法生成函数引用,因此它没有可用于#selector表达式的东西。

目前,没有一种方法可以#selector用来访问属性 getter/setter —Selector(...)与字符串常量一起使用是您唯一的选择。

(这实际上只是一个长期存在的已知问题的新面孔......这与您也无法将属性 getter/setter 传递给类似mapor 的原因相同filter。我想我已经在http://bugs上看到了一些东西。 swift.org关于这个,但我目前没有找到。)