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] } ?? []) } }