Selector型はObjective-Cのセレクタという概念を表現します。
セレクタはメソッドの名前を表す型で、これを利用することで、メソッドをそれが属する型とは切り離して扱うことができます。
Selector型の生成
Selector型を生成するには、#selectorキーワードを利用します。
#selectorキーワードに参照したいメソッド名を渡すことで、Selector型の値を生成できます。自身が属するスコープ内のメソッドを参照する場合は型名を省略できます。
#selector(型名.メソッド名)
参照するメソッド
セレクタはObjective-Cの概念であるため、Selector型を生成するにはメソッドがObjective-Cから参照可能である必要があります。メソッドをObjective-Cから参照可能にするには、objc属性を指定します。
@objc func someMethod() {}
例
class SomeClass{
@objc func someMethod()->String{
return "someMethod"
}
}
//someMethod()メソッドを表すSelector型のインスタンスを生成
let ins = #selector(SomeClass.someMethod)
print(ins)
//実行結果
//someMethod
引数にSelector型を持つメソッド
class SomeClass{
@objc func someMethod()->String{
return "someMethod"
}
}
func method(_ sel:Selector){
print(sel)
}
method(#selector(SomeClass.someMethod))
//実行結果
//someMethod
同じスコープ内のメソッドを参照
class SomeClass{
@objc func someMethod()->String{
return "someMethod"
}
func method(){
print(#selector(someMethod))
}
}
let ins = SomeClass();
ins.method()
//実行結果
//someMethod