在我的应用程序中,我想在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内部。)

09-05 02:33