[swift-users] Weird protocol behaviour.

Howard Lovatt howard.lovatt at gmail.com
Thu Dec 22 14:17:25 CST 2016


I suspect a compiler bug since A is a P. The equivalent in Java works:

interface P {}
class X implements P {}
 
<A extends P> void foo(A x) {}
 
void bar() {
    final P x = new X();
    foo(x);
}

-- Howard. 

> On 23 Dec 2016, at 3:19 am, Rien via swift-users <swift-users at swift.org> wrote:
> 
> IMO the error message says it all:
> 
> Playground execution failed: error: MyPlayground8.playground:9:5: error: cannot invoke 'foo' with an argument list of type '(P)'
>    foo(x)
>    ^
> 
> MyPlayground8.playground:9:5: note: expected an argument list of type '(A)'
>    foo(x)
>    ^
> 
> I.e. you are passing in a protocol while the function is specified for a type.
> Said other way: On which data do you expect the protocol to operate?
> 
> Regards,
> Rien
> 
> Site: http://balancingrock.nl
> Blog: http://swiftrien.blogspot.com
> Github: http://github.com/Swiftrien
> Project: http://swiftfire.nl
> 
> 
> 
> 
>> On 22 Dec 2016, at 17:05, Mikhail Seriukov via swift-users <swift-users at swift.org> wrote:
>> 
>> Hello community! I' wondering if somebody can explain this to me.
>> Please take look at the snippet.
>> 
>> protocol P {}
>> struct X:P {}
>> 
>> func foo<A:P>(_ x:A) {}
>> 
>> func bar() {
>>    //let x = X() // this compiles
>>    let x = X() as P // this does not compile. Why?
>>    foo(x)
>> }
>> 
>> I expect the both cases to work though. But only first works? And I do not understand why.
>> My coworkers said that it is a compiler bug, but I'm not shure it is.
>> Thanks for the help.
>> _______________________________________________
>> swift-users mailing list
>> swift-users at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-users
> 
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20161223/729f6cd3/attachment.html>


More information about the swift-users mailing list