无法将类型 'NSObject -> () -> PostFeed' 的值转换为预期的参数类型 'AnyObject?'

Cannot convert value of type 'NSObject -> () -> PostFeed' to expected argument type '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 的所有其他 addTarget 函数中使用 self UIButton,但我从未遇到过此错误

将您的 let 更改为 lazy var

我不确定编译器到底在想什么(或者它疯狂的错误消息来自哪里),但我的猜测是:

在Swift中,let的变量必须先初始化才能使用self。这样做的一个原因是编译器无法验证 addTarget(action:forControlEvents:) 不会尝试调用 anonSwitch() 它为 target 获得的任何东西,或者做其他事情,比如访问 a将在 anonSwitch 之后初始化的不同变量,这取决于此对象的初始化是否已完成。

使用 lazy var 意味着编译器可以验证分配给 anonSwitch 的值在 self 是一个有效对象之前不会被访问,因为它不可能调用 anonSwitch 直到 class 的所有其他成员都已初始化。