6

Just a simple task, but I'm in trouble. Trying to make a different way but it fails.

enter image description here

How to init NSTimer with declared previously variable? Neither var nor let helps.

Martin R
  • 529,903
  • 94
  • 1,240
  • 1,382
Olexiy Pyvovarov
  • 870
  • 2
  • 17
  • 32
  • Possible duplicate of [How to initialize properties that depend on each other](http://stackoverflow.com/questions/25854300/how-to-initialize-properties-that-depend-on-each-other) – Franklin Yu May 19 '16 at 20:36

2 Answers2

10

The initial value of a property (in your case: timer) cannot depend on another property of the class (in your case: interval).

Therefore you have to move the assigment timer = NSTimer(interval, ...) into a method of the class, e.g. into viewDidLoad. As a consequence, timer has to be defined as an optional or implicitly unwrapped optional.

Note also that Selector(...) takes a literal string as argument, not the method itself.

So this should work:

class ViewController: UIViewController {

    var interval : NSTimeInterval = 1.0
    var timer : NSTimer!

    func timerRedraw() {

    }

    override func viewDidLoad() {
        super.viewDidLoad()
        timer = NSTimer(timeInterval: interval, target: self, selector: Selector("timerRedraw"), userInfo: nil, repeats: true)

        // ...
    }

    // Other methods ...
}
Martin R
  • 529,903
  • 94
  • 1,240
  • 1,382
0

Try:

var interval:NSTimeInterval = 1.0
var timer = NSTimer.scheduledTimerWithTimeInterval(interval, target: self, selector: "timerRedraw:", userInfo: nil, repeats: true)

pro-tip and hopefully an appreciated FYI: Swift functions should also start with lower case letters (i.e. "timerRedraw").

Michael Dautermann
  • 88,797
  • 17
  • 166
  • 215