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

Pass an array of protocol conforming objects to function

我想编写一个函数,它接受一组符合给定协议的对象。我写了以下游乐场代码:

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]) {} 作为泛型函数表示您想要一个符合 Request 协议的具体已知类型 T

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

的一种类型的数组。