将我的代码迁移到 Swift 2.2,我有一个属性var activeTextField:UITextfield?,我使用的选择器是"setActiveTextField:". 此方法在我的 swift 代码中不明确存在。
使用新语法,#selector(setActiveTextField)不起作用:Use of unresolved identifier
我知道我可以使用,Selector("setActiveTextField:")但我会失去新的快速选择器的好处。
那么,这样做的新方法是什么?
这里的问题是您正在使用属性,而不是方法。这有两个问题:
#selector表达式需要一个 Swift 函数/方法引用。当 Swift 编译你的源代码时,它不知道 ObjC-(UITextField*)activeTextField和-(void)setActiveTextField:(UITextField*)field方法会存在,所以它不能为它们生成函数引用。由于它无法生成函数引用,因此它没有可用于#selector表达式的东西。
目前,没有一种方法可以#selector用来访问属性 getter/setter —Selector(...)与字符串常量一起使用是您唯一的选择。
(这实际上只是一个长期存在的已知问题的新面孔......这与您也无法将属性 getter/setter 传递给类似mapor 的原因相同filter。我想我已经在http://bugs上看到了一些东西。 swift.org关于这个,但我目前没有找到。)
| 归档时间: |
|
| 查看次数: |
1694 次 |
| 最近记录: |