見出し画像

SwiftUIでいこう! - Timer処理まとめ。

タイマーを作るときの作り方をまとめ。簡単にXcodeのplaygroundで実行してみます。

import Foundation

var count = 0

Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in
   count += 1
   print(count)
}

これで、コンソールに1,2,3,・・・とカウントアップされます。これを関数に変えても同じことが出来ます。

var count = 0

func fireTimer() {
   count += 1
   print(count)
}

Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in

fireTimer()
}

では、Replacing Foundation Timers with Timer Publishersと題して、Publisherを使ったシンプルな書き方が紹介されています。

Publisher、Combineを使った方法です。今後はこちらを使うことが主流になりそうです。

import Combine
import Foundation

let cancellable = Timer.publish(every: 1, on: .main, in: .default)
   .autoconnect()
   .sink { _ in
       periodicalFunction()
   }
func periodicalFunction() {
        print("update")
   }

これを実行すると、1秒毎に"update"という文字がコンソールに出力されます。関数を作ってそれを定期的な時間に実行させています。

そして、タイマーを止めるときのコード。

timer = Timer.scheduledTimer()

と作った場合、止める時は

func stopTimer() {
     timer?.invalidate()
}

とします。

Combineを使う場合動かすときは

timerCancelable = Timer.publish()

として、止める時は

func stopTimer() {
 timerCancelable?.cancel()
}

とします。timerCancelableAnyCancellableに適合させたものを使います。

以下参考サイト。

How to use a timer with SwiftUI

SwiftUIとCombineフレームワークその1


この記事が気に入ったらサポートをしてみませんか?