> On Dec 28, 2015, at 3:43 PM, Jonathan Bailey via swift-users
> <swift-users@swift.org> wrote:
>
> In the following code, I get an error on the line indicated (4th from the
> bottom) that "Protocol 'APIEndPoint' can only be used as a generic constraint
> because it has Self or associated type requirements” I understand this is
> because the APIEndPoint protocol contains a type alias. However I don’t
> understand why this means it can’t be used as a type?
I finally understand the reason, after reading [a draft of] objc.io's Advanced
Swift book. You can’t use such a protocol as a type because if the aliased type
appears in the API, it won’t be consistent between different objects that
conform to the protocol but have different aliased types. For example, if a
protocol Foo has a method foo() that returns a typealias T, then different
objects conforming to Foo will return different types from their foo() methods,
so there’s no type-safe way to represent that return value.
In your case you’ve got a typealias but you’re not using it in the protocol’s
API. It looks like it’s just internally used inside the implementation of the
urlString method. You can probably change your code around to get the same
effect without using a typealias. Make baseURL a regular non-static method of
API, then just have a property of APIEndpoint of type API.
—Jens
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users