protocol P {} protocol Q { associatedtype T: P func foo1() -> T func foo2() -> T } extension Int: P {} struct S: Q { func foo1() -> some P { return 1 } func foo2() -> some P { return 2 } } let s = S() var a = s.foo1() a = s.foo2() // OK
var a: some Foo = ... let b: some Foo = ... a = b // コンパイルエラー
a
と b
が同じ型に見えるのに。some
なのか。some Foo
と some Foo
だと英語的に同じじゃないという意味になるのか。