株式会社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 でメソッドを呼び出した時に、引数の設定の仕方でちょこっと苦戦したのでメモ。

やりたいこと

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