株式会社HUBFACTORY - 新たなつながりを作るサービス・アプリ・WEB制作会社 -
CREATE A NEW HUB
IN THE WEB SEARVICE...
PICK UP

アプリ

【Swift 3.0】Selector での引数の設定のしかた

2016.10.5

CATEGORY - アプリ

特に Swift 3.0 に限った話ではないんですが、Swift で Selector でメソッドを呼び出した時に、引数の設定の仕方でちょこっと苦戦したのでメモ。

Swift Selector ios

やりたいこと

Timerクラスを使って一定時間経過後に、Selectorを実行。Selectorには引数としてメッセージを渡してメッセージを表示する。

Timerクラスについて

Timer.scheduledTimer では、5つのプロパティを持っています。

1. timeInterval : 時間を指定します。その時間後にSelectorを実行する感じです。
2. target : メソッド(Selector)を実行するターゲット
3. selector : 時間後に実行するメソッドを指定
4. userInfo : メソッド(Selector)に渡す引数を指定
5. repeats : リピートするかどうか

コードはこんな感じです

※対象部分のみです。

    override func viewDidLoad() {
      super.viewDidLoad()
      let userInfo: Dictionary<String, Any> = ["message": "めっせーじだよ",
                                              "id": 1001]
      _ = Timer.scheduledTimer(
        timeInterval: 0.2,
        target: self,
        selector: #selector(self.dispMessage(_:)),
        userInfo: userInfo,
        repeats: false)
    }
    
    func dispMessage(_ timer: Timer!) {
      let info = timer.userInfo as! Dictionary<String, Any>
      guard let message = info["message"] as? String else {
        return
      }
      print(message)
    }
  

こんな感じで、selector に、dispMessage を指定して、userInfo に dispMessage メソッドに渡したい引数を入れます。

メソッドの引数には、今回は、Timer クラスが返ってくるのでそれを指定することで、メソッド内で、timer.userInfo で使うことができます。

ちなみに、userInfo の型をいろいろ指定してあげないと、”型があってないよ!”っていうエラーがでるので、メソッド内でちゃんと指定してあげましょう。

今回だと、これを実行すると、0.2秒後に、consoleに “めっせーじだよ” って表示されます。

以上、Selector の引数の指定方法でした。

ではでは。

株式会社HUBFACTORY(ハブファクトリー) - 新たなつながりを作るサービス・アプリ・WEB制作会社 -

© 2014-2015 HUBFACTORY.INC

PAGE TOP