[Swift]「タイマー」

タイマーは、アプリ開発で時間を制御する重要な要素です。

本記事ではXcodeを使って具体的なサンプルコードを交えながら分かりやすく説明します。

目次

Timerとは?タイマーの基礎知識

Timerは、iOSアプリ開発において時間を管理するための重要な要素です。

タイマーを活用することで、一定の時間間隔でイベントをトリガーすることができます。例えば、ゲームの制限時間やアプリ内のリアルタイム情報の更新に役立ちます。

以下は、Timerを用いた基本的なコード事例です。

Timer:基本的なコード事例
import UIKit

class TimerViewController: UIViewController {
    var timer: Timer?

    override func viewDidLoad() {
        super.viewDidLoad()
        // タイマーの時間間隔(秒)と実行メソッドを指定
        timer = Timer.scheduledTimer(
            timeInterval: 1.0, 
            target: self, 
            selector: #selector(updateTimer), 
            userInfo: nil, 
            repeats: true)
    }

    @objc func updateTimer() {
        // ここに定期的に実行したい処理を書く
    }

    // タイマーを停止する場合は、以下のようにして停止します
    // timer?.invalidate()
}

このコードは、TimerViewControllerというクラスが定義されており、UIViewControllerを継承しています。このクラスはタイマーを使用して定期的な処理を行うiOSアプリの一部として使用されることを想定しています。

このクラスには以下の要素が含まれています:

  1. timer変数
    Timerクラスのインスタンス変数であり、後でタイマーを管理するために使用されます。
  1. timer = Timer.scheduledTimer(
    TimerクラスのscheduledTimerメソッドを使用して、1秒ごとにupdateTimerメソッドを実行するタイマーを作成しています。
  2. @objc func updateTimer()メソッド
    @objcアノテーションをつけることでObjective-Cからも呼び出せるようになるメソッドです。
    このメソッド内に、定期的に実行したい処理を記述します。
  3. タイマーの停止:timer?.invalidate()
    タイマーを停止することができます。

timer変数scheduledTimerメソッドについて詳しく解説します。

timer変数
  1. timerの型はTimer?です。
  2. Timer?はオプショナルなTimer型を表します。
  3. オプショナルは、値が存在しない可能性を考慮した型です。
  4. 具体的には、timer変数はTimer型のインスタンスを保持する可能性がありますが、最初は何も保持していません(nil)。
  5. もし、この変数がオプショナルでない場合(var timer: Timerとするなど)、初期値を指定しない限り、コンパイルエラーが発生します。しかし、オプショナルならば初期値を指定せずに宣言できます。
scheduledTimerメソッド
  1. timeInterval: 1.0
    timeIntervalは、タイマーが実行される間隔を秒単位で指定します。
    この場合、1.0秒ごとにタイマーが実行されます。
  2. target: self
    targetは、タイマーが実行される対象を指定します。
    ここでは、selfを指定しています。
    selfは、TimerViewControllerクラスのインスタンス自体を指します。
    つまり、タイマーがこのTimerViewControllerのインスタンスに対して実行されます。
  3. selector: #selector(updateTimer)
    selectorは、タイマーが実行するメソッドを指定します。
    この場合、#selector(updateTimer)を指定しています。
    updateTimerというメソッドがTimerViewControllerクラスに存在し、タイマーが1秒ごとにこのメソッドが呼び出されます。
  4. userInfo: nil
    userInfoは、タイマーを実行する際に渡す情報を指定しますが、ここでは不要なのでnilを指定しています。
  5. repeats: true
    repeatsは、タイマーを繰り返し実行するかどうかを指定します。
    この場合、trueを指定しているため、タイマーは繰り返し実行されます。
    falseを指定すると、タイマーは1回だけ実行されます。

Xcodeに実装しよう:Timer

ここでは、以下のコードをXcodeに記載して、実際にiPhone上で動かしてみます。

import UIKit

class ViewController: UIViewController {
    
    @IBOutlet weak var timeLabel: UILabel!
    
    var timer = Timer()
    var counter = 0

    override func viewDidLoad() {
        super.viewDidLoad()
        
        counter = 10
        timeLabel.text = "Time: \(counter)"
        
        timer = Timer.scheduledTimer(
            timeInterval: 1, 
            target: self, 
            selector: #selector(timerFunction), 
            userInfo: nil, 
            repeats: true)
    }
    
    @objc func timerFunction() {
        
        timeLabel.text = "Time: \(counter)"
        counter -= 1
        
        if counter == 0 {
            timer.invalidate()
            timeLabel.text = "Time's Over"
        }
    }
}

このコードは、ViewControllerというクラスが定義されており、UIViewControllerを継承しています。このクラスは、タイマーを使用してカウントダウンを行い、経過時間をラベルに表示するiOSアプリの一部として使用されることを想定しています。

このクラスには以下の要素が含まれています:

var timer = Timer()
  • timerは、タイマーを管理するためのTimerオブジェクトです。
  • 初期化していますが、scheduledTimerメソッドで新しいタイマーを作成して代入することで、この初期値は上書きされます。
viewDidLoad()メソッド
  1. counter = 10:カウントダウンの初期値として、counterに10を設定します。
  2. timeLabel.text = "Time: \(counter)"
    ラベルに初期値のカウントダウン時間を表示します。
  3. timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(timerFunction), userInfo: nil, repeats: true)
    1秒ごとにtimerFunctionメソッドが実行されるタイマーを作成します。
@objc func timerFunction()

@objcアノテーションをつけることでObjective-Cからも呼び出せるようになるメソッドです。このメソッドは、タイマーが1秒ごとに呼び出すメソッドです。

  • timeLabel.text = "Time: \(counter)":ラベルに現在のカウントダウン時間を表示します。
  • counter -= 1:カウントダウン時間を1秒減らします。
  • if counter == 0:カウントダウンが終了したら、タイマーを停止し、ラベルに「Time’s Over」と表示します。
アプリ起動後、1秒ごとにTimerが1減少
10秒経過後、表示がTime’s Overになる

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次