Alk*_*Alk 3 uiswitch ios swift
我正在UISwitch以下列方式添加:
let anonSwitch : UISwitch = {
let mySwitch = UISwitch()
mySwitch.on = false
mySwitch.setOn(false, animated: false);
mySwitch.tintColor = UIColor(red: (69/255.0), green: (209/255.0), blue: (153/255.0), alpha: 1.0)
mySwitch.addTarget(self, action: #selector(handleAnonSwitch), forControlEvents: .ValueChanged)
return mySwitch
}()
Run Code Online (Sandbox Code Playgroud)
现在我在self关键字中收到以下错误消息mySwitch.addTarget:
Cannot convert value of type 'NSObject -> () -> PostFeed' to expected argument type 'AnyObject?'
Run Code Online (Sandbox Code Playgroud)
我self在所有其他addTarget函数中使用UIButton,我从未遇到过这个错误
Ben*_*ous 12
把你let变成一个lazy var.
我不确定编译器究竟在想什么(或者它的疯狂错误消息来自哪里),但我的猜测是这样的:
在Swift中,let必须在使用之前初始化的变量self.这样做的一个原因是编译器无法验证是否addTarget(action:forControlEvents:)会尝试调用anonSwitch()它获取的任何内容target,或者执行其他操作,例如访问将在之后初始化的其他变量anonSwitch,这取决于已完成的初始化这个对象.
使用lazy var意味着编译器可以验证anonSwitch之前不会访问的值self是否为有效对象,因为anonSwitch在初始化类的所有其他成员之前无法调用.
| 归档时间: |
|
| 查看次数: |
1949 次 |
| 最近记录: |