无法将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.addTargetself关键字上收到以下错误消息:

  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