そのprotocol導入、意味ないかも
3500 ワード
導入したはずのprotocolがconformsToProtocol
に認識されない現象に遭ったので、それを読み解く。
前提
- protocolはclass、extension、categoryのどちらも導入できる
- extensionは静的、categoryは動的1
結論
- protocolをextensionで書きたいなら、classのimplementationの見えるところ2に書こう
- protocolをcategoryで書きたいなら、categoryのimplementationの見えるところに書こう
実験
- protocolをextensionで書きたいなら、classのimplementationの見えるところ2に書こう
- protocolをcategoryで書きたいなら、categoryのimplementationの見えるところに書こう
実験
UNUserNotificationCenterDelegate
がconformsToProtocol
に認識されるか確認してみた。
-
AppDelegate.h
をimportしているファイルAppDelegate.m
AppDelegate+Hoge.m
-
AppDelegate+Hoge.h
をimportしているファイルAppDelegate+Hoge.m
- AppDelegateのimplementationは
AppDelegate.m
にある - AppDelegateのcategoryのimplementationは
AppDelegate+Hoge.m
にある - チェック=conformsToProtocol
結果
- AppDelegateでprotocolを導入
-
AppDelegate.h
で定義-
AppDelegate.m
でチェック => YES -
AppDelegate+Hoge.m
でチェック => YES
-
-
ViewController.h
で定義-
AppDelegate.m
でチェック => NO -
AppDelegate+Hoge.m
でチェック => NO
-
-
- AppDelegateのextensionでprotocolを導入
-
AppDelegate.h
で定義-
AppDelegate.m
でチェック => YES -
AppDelegate+Hoge.m
でチェック => YES
-
-
AppDelegate+Hoge.h
で定義-
AppDelegate.m
でチェック => NO -
AppDelegate+Hoge.m
でチェック => NO
-
-
ViewController.h
で定義-
AppDelegate.m
でチェック => NO -
AppDelegate+Hoge.m
でチェック => NO
-
-
- AppDelegateのcategoryでprotocolを導入
-
AppDelegate.h
で定義-
AppDelegate.m
でチェック => NO -
AppDelegate+Hoge.m
でチェック => NO
-
-
AppDelegate+Hoge.h
で定義-
AppDelegate.m
でチェック => YES -
AppDelegate+Hoge.m
でチェック => YES
-
-
ViewController.h
で定義-
AppDelegate.m
でチェック => NO -
AppDelegate+Hoge.m
でチェック => NO
-
-
上記の結果から分かるのは、
- protocolの導入するinterfaceは、implementationが伴わないと
conformsToProtocol
は認識しない - ただし、種類によって認識するimplementationが違う:
- AppDelegateに導入 => AppDelegateのimplementation
- AppDelegateのextensionに導入 => AppDelegateのimplementation
- AppDelegateのcategoryに導入 => AppDelegateのcategoryのimplementation
-
importされるヘッダーに、もしくは同じファイルに書く ↩
Author And Source
この問題について(そのprotocol導入、意味ないかも), 我々は、より多くの情報をここで見つけました https://qiita.com/konyavic/items/b00167efadcac0d5b28a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .