Avatar
@hiragram structのGenericsは見えないけどprotocolのassociatedtypeは見えるから
8:09 AM
例えばこういうコードなら通る struct Hoge<T> { let value: T } extension Hoge where T: BidirectionalCollection { func fuga() -> T.Iterator.Element { return value.first! } } Hoge(value: [1, 2, 3]).fuga() // 1
8:10 AM
って話が上の方にあった
8:10 AM
TをArrayっぽく任意のSequenceからinitしたい、みたいな感じだと
8:11 AM
Arrayのinitは、RangeReplaceableCollectionの実装だから
8:12 AM
extension Hoge where T: RangeReplaceableCollection { }と書いておけば、その中でT.initが使えるようになる
8:14 AM
BidirectionalCollectionはよく使うんだけどなんだったかな、lastが欲しいので使ってた気がする。