[swift-users] returning an array of Protocol-conforming objects from a function

Trent Nadeau tanadeau at gmail.com
Mon Jan 25 21:50:38 CST 2016


That code works fine for me if I change the cast to "as [MyProtocol]".

protocol MyProtocol {}

struct Blah : MyProtocol { }

func foo() -> [MyProtocol] {
  let a = [Blah(), Blah()] as [MyProtocol]
  return a
}

On Mon, Jan 25, 2016 at 10:47 PM, Austin Zheng via swift-users <
swift-users at swift.org> wrote:

> Hi Ryan,
>
> Are you sure it works with user-defined struct types? I tried the
> following code, and got the same error:
>
> protocol MyProtocol {}
>
> struct Blah : MyProtocol { }
>
> func foo() -> [MyProtocol] {
>   let a = [Blah(), Blah()] as [Blah]
>   return a
> }
>
> 'class Blah' works fine.
>
> Even so, this is not the behavior I would have expected. Perhaps someone
> else can explain why [T] can't be upcasted to [P] when T is a struct and T
> : P.
>
> Best,
> Austin
>
>
> On Jan 25, 2016, at 7:36 PM, Ryan Walklin via swift-users <
> swift-users at swift.org> wrote:
>
> Hi All,
>
> I have a function which returns a closure, which then returns an array of
> objects conforming to a protocol.
>
> ie.
>
> protocol MyProtocol {}
>
> extension Float: MyProtocol {}
> extension OtherType: MyProtocol {}
>
> When I try to return an array of Floats, I get the error “Cannot convert
> value of type '[Float]' to closure result type ‘[MyProtocol]”.
>
> Other struct-based types work fine.
>
> Is this not possible with standard library types?
>
> Regards,
>
> Ryan
> _______________________________________________
> 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
>
>


-- 
Trent Nadeau
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20160125/c1ad6155/attachment.html>


More information about the swift-users mailing list