LoginSignup
0

More than 5 years have passed since last update.

Swiftのメソッドで引数の型指定を間違っていてもコンパイルエラーにならないパターンがあった

Posted at

はじめに

Selectorのお話。
Swiftでもメソッドで定義している型とはまったく異なるオブジェクトを渡してもクラッシュせずに動いてしまうパターンがあったことに驚いたのでメモ。

実装

呼び出し元


let gesture = UITapGestureRecognizer(target: self, action: #selector(tapped(_:)))
tapView.addGestureRecognizer(gesture)

メソッドの定義


@objc private func tapped(_ sender: UIView) {
    self.delegate?.tapped(tapped: sender)
}

senderにUIViewなんか渡ってこないけどこんな定義をしていて、基本的に動いていた・・・
delegateに渡したUIViewを取り扱う必要がある一部のケースでクラッシュして判明。
Selectorの引数定義は十分に気をつける。

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
0