无法将types'NSObject – >() – > PostFeed'的值转换为期望的参数types'AnyObject?'
我以下面的方式添加一个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 }()
现在,我在mySwitch.addTarget
的self
关键字上收到以下错误消息:
Cannot convert value of type 'NSObject -> () -> PostFeed' to expected argument type 'AnyObject?'
我在我的所有其他addTarget
函数为UIButton
使用self
,我从来没有遇到这个错误
把你的let
变成一个lazy var
。
我不确定编译器在想什么(或者它的疯狂的错误信息来自何处),但是我的猜测是这样的:
在Swift中,必须先初始化variables,然后才能使用self
。 其中一个原因是,编译器无法validationaddTarget(action:forControlEvents:)
不会尝试调用anonSwitch()
以获取target
,或者执行其他操作,如访问其他variables在anonSwitch
之后被初始化,这取决于为这个对象完成的初始化。
使用lazy var
意味着编译器可以validation赋值给anonSwitch
的值在self
是一个有效的对象之前是不会被访问的,因为在类的所有其他成员都被初始化之前,不可能调用anonSwitch
。