LoginSignup
4
7

More than 5 years have passed since last update.

PlaygroundでNSTimerを実行する方法

Posted at

概要

uikit - Using NSTimer in swift playground - Stack Overflowによると、playgroundでNSTimerを実行する方法は二つあります。一つは、「XCPlaygroundPageを使う」方法、もう一つは、「CFRunLoopRunを使う」方法です。二つの方法を実際に試してみました。

OS: MacOSX El Capitan, Xcode 7.2で動作確認しました。

実装

まず、タイマー実行用に、NSTimerから派生したクラスを作成します。
このクラスは、1秒ごとに現在時刻をコンソールに表示します。

このコードをXCodeで実行すると、コンソールには一度しか表示されません。XCodeの実行プロセスが終了するためです。スレッド実行するためには、実行プロセスを終了させないようにする必要があります。

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

    func onTimer() {
        let today = NSDate()
        print("現在時刻は \(today) です")
    }
}

var myTimer = MyTimer()
myTimer.startTimer()

XCPlaygroundPageを使う

XCPlaygroundPageは、Xcodeからplaygroundを使うためのモジュールです。playground要素のキャプチャ・表示、Live Viewの管理、コード実行機能を持ちます。

Xcodeは、デフォルトで、すべてのtop-levelコードを実行すると終了します。非同期処理を実行する時には、無限実行を有効にすることによってplyagroundのtop-level codeの終わりに達した後も処理を継続することを許可します。

タイマーを使うためには、無限実行フラグ(needsIndefiniteExecution)をtrueに設定します。

import Foundation
import XCPlayground
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true
class MyTimer: NSTimer {
    func startTimer() {
        NSTimer.scheduledTimerWithTimeInterval(1, target:self, selector: Selector("onTimer"), userInfo: nil, repeats: true)

    }
    func onTimer() {
        let today = NSDate()
        print("現在時刻は \(today) です")
    }
}

var myTimer = MyTimer()
myTimer.startTimer()

CFRunLoopを使う

CFRunLoopは、スレッドに一つ存在し、入力ソースを監視するモジュールです。
CFRunLoopRun()は、現在のスレッドのCFRunLoopオブジェクトを無限に実行します。

ソースコード

import Foundation
import XCPlayground
class MyTimer: NSTimer {
    func startTimer() {
        NSTimer.scheduledTimerWithTimeInterval(1, target:self, selector: Selector("onTimer"), userInfo: nil, repeats: true)

    }
    func onTimer() {
        let today = NSDate()
        print("現在時刻は \(today) です")
    }
}

var myTimer = MyTimer()
myTimer.startTimer()

CFRunLoopRun()

参考資料

4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7