(discord/swift/2018/03/13/1) Codableのtypealiasにstructを使ったtips
概要
- discord ios dev
- #swift
- 2018/03/13
- Codableのtypealiasにstructを使ったtips
log
omochimetaru
- 2018/03/13
ときどき話題に出てくるCodableとJSONの話で、JSON表現用の型とモデルの型をわけて・・・ってパターン、こうやると少し楽になると気づいた
t.ae
- 2018/03/13
assoctypeにtypealiasじゃなくてstruct定義でもいいんですね。
言われてみりゃそりゃそうだって感じですけど使ったことなかった。
tarunon
- 2018/03/13
いや、これは暗黙的に推論されてると思う
t.ae
- 2018/03/13
メソッドのほうからかな?
tarunon
- 2018/03/13
そう
t.ae
- 2018/03/13
試そうとしたんですが最近playgroundsが開かない
protocol Init { init() } protocol Proto { associatedtype JSON: Init } extension Proto { func hoge() -> JSON { return JSON() } } struct Hoge: Proto { struct JSON { } }
こう書いたらtypealias書けって言われますね
tarunon
- 2018/03/13
してないかな
t.ae
- 2018/03/13
: Init
つけたら怒られないですね
tarunon
- 2018/03/13
お、そこはそうだ
t.ae
- 2018/03/13
protocol Init { init() } protocol Proto { associatedtype JSON: Init } extension Proto { func hoge() -> JSON { return JSON() } } struct Hoge: Proto { struct JSON: Init, CustomStringConvertible { var description: String = "Hoge.JSON" } } print(Hoge().hoge()) // Hoge.JSON
こうかな
hoge()が挿入されて推論されるのかJSONが先にあるのか分からない
tarunon
- 2018/03/13
protocol Foo { associatedtype Bar } struct Piyo: Foo { struct Bar { } }
ありゃ、これ通るから
動きますね、すごい。昔はこれができなかったような気がします
omochimetaru
- 2018/03/13
ん?
t.ae
- 2018/03/13
それだけだとassoctypeのBarとPiyo.Barが同一視されてるか微妙だなぁと思ったんですが
omochimetaru
- 2018/03/13
え、結局、名前でマッチしてた?
tarunon
- 2018/03/13
そうっぽい
tarunon
- 2018/03/13
@t.ae 同一視出来ていないとコンパイルが通らないのでこれはOKなきがします
t.ae
- 2018/03/13
あーない場合はtypealias無いって言われますねそういえば
そんな基本的なことを忘れて長いコードを書いてしまった
omochimetaru
- 2018/03/13
本題どっか行った
t.ae
- 2018/03/13
encodeToInnerJSONの部分隠蔽できないんですかね
omochimetaru
- 2018/03/13
隠蔽とは?
t.ae
- 2018/03/13
UserCredentialをそのままJSONEncoderとかにわたせるように
omochimetaru
- 2018/03/13
なってるよ
Codableだから
t.ae
- 2018/03/13
あれ?
ああ一番上から来てるのか
omochimetaru
- 2018/03/13
そうか、エンコード・デコードのサンプルも書かないとだめだった。