Alexander Streltsov Alexander Streltsov - 1 month ago 13
Swift Question

How to use UISwitch correctly?

My code is not working. I don't know why. The problem is the property of switchChanged function. If property is empty then code is working.

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.

let rect = CGRectMake(130, 100, 0, 0)
let uiSwitch = UISwitch(frame: rect)
uiSwitch.setOn(true, animated: true)
uiSwitch.addTarget(self, action: "switchChanged", forControlEvents: UIControlEvents.ValueChanged)

self.view.addSubview(uiSwitch)
}

func switchChanged(uiSwitch: UISwitch) {
var message = "Turn on the switch"
if uiSwitch.on {
message = "Turn off the switch"
} else {
message = "Turn on the switch"
}
let alert = UIAlertController(title: "Information", message: message, preferredStyle: UIAlertControllerStyle.Alert)
let action = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)
alert.addAction(action)
self.presentViewController(alert, animated: true, completion: nil)
}


Error: "libc++abi.dylib: terminating with uncaught exception of type NSException"

Answer

"switchChanged" is not the correct selector name, you should use "switchChanged:" to account for the parameter. switchChanged would be a method without parameters.

Also, in Swift you should use #selector(switchChanged(_:)) instead. That will validate the existence of selectors during compilation.