2015-03-24 8 views
4

Я хотел бы знать, как использовать NSTimer внутри Swift Playground. This question has been asked before, но ни один из ответов не ответил на вопрос.Использование NSTimer в быстрой игровой площадке

Вот мой код Детской площадки:

import Foundation 

class MyClass { 

    func startTimer() { 
     NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: "onTimer:", userInfo: nil, repeats: true) 
    } 

    func onTimer(timer:NSTimer!) { 
     println("Timer here") 
    } 
} 

var anInstance = MyClass() 

anInstance.startTimer() 

NSTimer Инстанцирования с scheduledTimerWithTimeInterval создает таймер и график его на текущем цикле выполнения.

Но метод onTimer никогда не называется. Зачем?

ответ

12

Прежде всего, ваш метод onTimer должен быть объявлен как @objc, или NSTimer не может найти это.

Что касается вашего вопроса, это потому, что вы не начали цикл запуска.

Для этого CFRunLoopRun() - самое простое решение, я думаю.

import Foundation 

class MyClass { 

    func startTimer() { 
     NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: "onTimer:", userInfo: nil, repeats: true) 
    } 

    @objc func onTimer(timer:NSTimer!) { 
     println("Timer here") 
    } 
} 

var anInstance = MyClass() 

anInstance.startTimer() 

CFRunLoopRun() // <-- HERE! 

Для полноты картины, так как @MartinR metioned в комментарии, вы также можете использовать XCPSetExecutionShouldContinueIndefinitely()

import Foundation 
import XCPlayground 
XCPSetExecutionShouldContinueIndefinitely() 

class MyClass { 

    func startTimer() { 
     NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: "onTimer:", userInfo: nil, repeats: true) 
    } 

    @objc func onTimer(timer:NSTimer!) { 
     println("Timer here") 
    } 
} 

var anInstance = MyClass() 

anInstance.startTimer() 

В этом случае площадка работает только секунды, указанные в шкале времени:

screenshot

+1

... или XCPSetExecutionShouldContinueIndefini tely() –

+0

@MartinR с 'import XCPlayground' :) – rintaro

+0

Это невероятно простая строка' CFRunLoopRun() '. Это имеет смысл, учитывая, как был реализован «NSTimer». –

Смежные вопросы