无法将类型 '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 的所有其他成员都已初始化。
我按以下方式添加 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 的所有其他成员都已初始化。