将一系列符合协议的对象传递给函数

问题描述

我想编写一个函数,该函数接受符合给定协议的对象数组。我编写了以下Playground代码

protocol Request {}

struct RequestA: Request {}
struct RequestB: Request {}

func execute<T: Request>(requests: [T]) {}

let requests: [Request] = [RequestA(),RequestB()]

execute(requests: requests)

但是,在最后一行我收到此错误:“协议类型'Request'的值不能符合'Request';只有struct / enum / class类型可以符合协议”。

我相信会发生此错误,因为该函数需要一个符合协议的对象数组,而不是协议的数组,但是我迷失了另一种方法

有人可以帮忙解决这个问题吗?

谢谢!

解决方法

func execute(requests: [Request]) {}
,

正如其他人所说,在这种情况下,您希望拥有func execute(requests: [Request]) {}

原因是func execute<T: Request>(requests: [T]) {}作为泛型函数表示您想要符合T协议的具体已知类型Request

[Request][T]的更改使您拥有符合Request的任何类型的数组,而不是符合某种类型的数组。