在我的应用程序中,我想在tableview单元格中使用UISwitch。当我试图将target添加到自定义开关时,出现了一个错误:“Segmentation fault:11”。代码在下面。我该怎么解决?
let cellSwitch: UISwitch = {
let cellSwitch = UISwitch()
cellSwitch.translatesAutoresizingMaskIntoConstraints = false
cellSwitch.addTarget(self, action: #selector(handleSwitch(_:)), for: UIControlEvents.valueChanged)
return cellSwitch
}()
func handleSwitch(_ mySwitch: UISwitch) {
if mySwitch.isOn {
print("On")
} else {
print("Off")
}
}
最佳答案
由于分段错误导致崩溃:11是Swift编译器的错误,您应该向Apple或Swift.org发送错误报告。
在Swift 3中,代码中的某些错误经常触发这个编译器错误。
在您的情况下,不能在实例属性的初始值中使用self
。解决这个问题的一种方法是使用lazy
:
lazy private(set) var cellSwitch: UISwitch = {
let cellSwitch = UISwitch()
cellSwitch.translatesAutoresizingMaskIntoConstraints = false
cellSwitch.addTarget(self, action: #selector(handleSwitch(_:)), for: UIControlEvents.valueChanged)
return cellSwitch
}()
另一种方法是将赋值移动到
cellSwitch
可用的位置。(可能在self
内部。)