func onTimer() {
...
}
override func viewDidLoad() {
super.viewDidLoad()
delta = CGPointMake(12.0,4.0)
NSTimer.scheduledTimerWithTimeInterval(0.05,
target:self,
selector:"onTimer",
userInfo:nil,
repeats:true)
}
Because there is no checking to ensure that the selector name is a well-formed selector (or that it even refers to a valid method), this method of naming a selector is dangerous and hence deprecated in Swift 2.2.
Instead, you should now use the new #selector expression that allows you to build a selector from a reference to a method. The above code now looks like this:
override func viewDidLoad() {
super.viewDidLoad()
NSTimer.scheduledTimerWithTimeInterval(0.05,
target:self,
selector:#selector(ViewController.onTimer),
userInfo:nil,
repeats:true)
}
If the target method accepts arguments, then the selector looks like this:
func doSomething(num1:Int, num2:Int) {
...
}
override func viewDidLoad() {
super.viewDidLoad()
NSTimer.scheduledTimerWithTimeInterval(0.05,
target:self,
selector:#selector(
ViewController.doSomething(_:num2:)),
userInfo:nil,
repeats:true)
}
While the old method of using string literal for selector is still supported in Swift 2.2, you should use the new syntax when updating your code.