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() // OKvar a: some Foo = ... let b: some Foo = ... a = b // コンパイルエラー
a と b が同じ型に見えるのに。some なのか。some Foo と some Foo だと英語的に同じじゃないという意味になるのか。