protocol P { associatedtype F: Foo func foo1() -> F func foo2() -> F } struct S { // これは多分 OK func foo1() -> some Foo { /* ... */ } func foo2() -> some Foo { /* ... */ } } let s = S() var a: some Foo = s.foo1() let b: some Foo = s.foo2() a = b // これも多分 OK