错误说:
在声明之前使用局部变量'SwtchChange(Parametr:)'
请,我需要更改什么?
mySwitch.addTarget(self, action: #selector(SwtchChange(Parametr:)), for: .valueChanged)
func SwtchChange(Parametr: UISwitch) {
if mySwitch.isOn {
print ("Yeah")
} else {
print ("Nope")
}
答案 0 :(得分:1)
您的问题是在试图添加目标的相同范围内声明函数。
如果您以某种方式设法在viewDidLoad或其他地方声明了函数,则首先需要将函数移至类级别,然后将@objc添加到函数的开头。
假设您添加目标并在同一范围内声明func,请按如下所示修改代码并将方法声明移至外部范围:
override func viewDidLoad() {
super.viewDidLoad()
mySwitch.addTarget(self, action: #selector(swtchChange), for: .valueChanged)
}
@objc func swtchChange(parametr: UISwitch) {
if parametr.isOn {
print ("Yeah")
} else {
print ("Nope")
}
}
另外,最好按照注释中的说明将函数名称以小写开头,因此我从swtchChange
将函数名称编辑为SwtchChange
。此外,参数名称也已更新并在方法范围内使用。
答案 1 :(得分:0)
在声明之前使用局部变量'SwtchChange(Parametr:)'
您收到此错误,是因为您在调用该方法后将方法嵌入到另一个方法中(可能是viewDidLoad
)
override func viewDidLoad() {
super.viewDidLoad()
...
mySwitch.addTarget(mySwitch, action: #selector(SwtchChange(Parametr:)), for: .valueChanged)
func SwtchChange(Parametr: UISwitch) {
if mySwitch.isOn {
print ("Yeah")
} else {
print ("Nope")
}
}
}
请勿执行此操作,您的目标方法应在视图控制器的全局范围中声明,并且由于您使用的是Selector
,因此必须将您的方法标记为{ {1}}
@objc
...还请注意,变量/方法的名称应以小大写字母开头,类型的名称应以大字母开头大写字母
答案 2 :(得分:0)
在Swift中使用选择器时,您需要确保功能标记为@objc。试试这个:
mySwitch.addTarget(self, action: #selector(switchChanged(_:)), for: .valueChanged)
@objc func switchChanged(_ sender: UISwitch) {
if sender.isOn {
print ("Yeah")
} else {
print ("Nope")
}
}