[swift-users] Weird protocol behaviour.

Rien Rien at Balancingrock.nl
Thu Dec 22 10:19:27 CST 2016


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



More information about the swift-users mailing list