func
の where
を消すと↓ Wraped
と S.Element
が同じ型である保証がなくなって +
ができない。 extension Optional { @_specialize(exported: true, where Wrapped == Int, S == [Int]) func foo<S : Sequence>(_ sequence: S) -> [Wrapped] { return Array(sequence) + (self.map { [$0] } ?? []) } }