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
extension Hoge where T: RangeReplaceableCollection { }
と書いておけば、その中でT.initが使えるようになるBidirectionalCollection
はよく使うんだけどなんだったかな、last
が欲しいので使ってた気がする。