(discord/swift/2018/03/05/0) extension時のclass->protocol、protocol->classのケースに置けるwhereの挙動
概要
- discord ios dev
- #swift
- 2018/03/05
- classのextension時 ( Clazz=クラス, Proto=プロトコル )
- extension Proto where Self : Clazz {}はイケる
- extension Clazz where Self : Proto {}はダメという話
log
omochimetaru
- 3/5 12:33
protocol AppViewController { var disposeBag : DisposeBag { get } } extension AppViewController where Self : UIViewController { } // OK extension UIViewController where Self : AppViewController {} // NG
こういうもんだっけ。難しい。
hiragram
- 3/5 13:26
あるある
tarunon
- 3/5 18:40
ヒラリ術を使うと
protocol AppViewController where Self: UIViewController { var disposeBag: DisposeBag { get } }
って宣言できる
いつから出来るようになったか知らない
omochimetaru
- 3/5 18:41
あ、そうやるのか、thx
hiragram
- 3/5 18:41
↑それでもextension内で例えばself.viewをいじろうとしたらselfはletだから書き換えられないよ〜〜〜みたいなことを
言われたのでprotocol ~~~ class where: UIViewController にしたよ
class無くてもself.view書き換えられてほしいけど
tarunon
- 3/5 18:42
VCの.view書き換えはちょっと野蛮じゃないか?
hiragram
- 3/5 18:42
あいや
addSubviewも怒られた気がする
tarunon
- 3/5 18:42
それはいけた気がする
hiragram
- 3/5 18:42
mutating扱いなのかな?とか思ったけどviewじゃなかったかも。titleとかだったかも。
tarunon
- 3/5 18:42
それはありそう
hiragram
- 3/5 18:42
とにかくselfはletのconstantだから書き換えられませんって言われてclassを足したのは確かだと思う
omochimetaru
- 3/5 18:43
AppViewControllerのextension funcでself.view = nil かいてもコンパイルできた
tarunon
- 3/5 18:46
野蛮だ
hiragram
- 3/5 18:46
class ナシでも?
あれー
omochimetaru
- 3/5 18:46
うん
tarunon
- 3/5 18:46
かしこい
omochimetaru
- 3/5 18:46
where付ける前の事なんじゃない?
hiragram
- 3/5 18:46
じゃーなんか勘違いしてたかなあ
うーん。そうかも。