privateメソッドをpeformSelectorで呼び出す
以下のようなライブラリが提供されているとします。
LibClass.h
1 2 3 4 5 6 | @interface LibClass : NSObject - (NSString*)getVersion; // - (NSString*)getMinorVersion; これが隠されている @end |
マイナーバージョンを取得するのにLibClass.aファイル内のprivateメソッドにアクセスしたい
1 2 | let lib = LibClass() let minorVersion = lib.performSelector( "getMinorVersion" ) |
一応以上でprivateメソッドへアクセスできますが、Swift2.2以降だと警告が出てきます。
Swift2.2以降でpeformSelectorの警告が出ないようにする
LibClass.h
1 2 3 4 5 6 | @interface LibClass : NSObject - (NSString*)getVersion; - (NSString*)getMinorVersion; @end |
呼び出し
1 2 | let lib = LibClass() let minorVersion = lib.performSelector(#selector(LibClass.getLibraryVersion)) |
これで警告がなくなる訳ですが、これってひょっとして...
ヘッダファイルに追記するだけでよかった
実はperformSelectorを使用せずともヘッダファイルに関数宣言するだけで使用できるようになります。
ただしメソッド名、引数と戻り値は一致させる必要が有ります。
1 2 | let lib = LibClass() let minorVersion = lib.getLibraryVersion() |