Combineの非同期処理をSwift Concurrencyのasync/awaitで書き換えてみた - ZOZO TECH BLOG
https://blog.personal-factory.com/2022/01/23/how-to-use-async-await-since-swift5_5/
A hill is usually less than 984-1968 feet (300-600 meters) whereas a mountain is usually higher than 1968 feet (600 meters).
たまにプラグインで必須じゃないメソッドがあるProtocol(インターフェイス)みたいなのをたまに見る。 実装というか準拠先にインターフェイス
※プロトコルの場合は「継承する(させる)」ではなく「準拠する(させる)」
どうやるのか調べた。
https://stackoverflow.com/questions/24032754/how-to-define-optional-methods-in-swift-protocol
protocol MyProtocol { func doSomething() } extension MyProtocol { func doSomething() { /* return a default value or just leave empty */ } } struct MyStruct: MyProtocol { /* no compile error */ }
extensionを用意すればいいのか!?
と思ったが、 delegate?.doSomething()
したとき準拠したクラスのメソッドで doSomething
が呼ばれない・・。
extension MyProtocol
のがそのまま呼ばれてる?
これがいい!
Raphael氏のを参考に警告がうざいので AnyObject
にした。
@objc
はプロトコル側にもいる
@objc protocol MyProtocol: AnyObject { func doSomething() @objc optional func doSomething() }
呼ぶ時は delegate?.doSomething?()
みたくメソッド自体がオプショナルなので ()
の前に ?
がいる模様。