Sequence として振る舞うときは Optional を返し、 ClosedRange として振る舞うときは non-Otional を返す)、それができないならサブタイプのフリをするのやめてほしいなぁ。今更どうしようもないけど。 (edited)class Animal {} class Cat: Animal {} protocol P { func foo() -> Animal } struct S: P { func foo() -> Cat { Cat() } } let s = S() print(s.foo())class Animal {} class Cat: Animal {} protocol P { func foo() -> Animal } struct S: P { func foo() -> Cat { Cat() } } let s = S() print(s.foo())