问题描述
我想编写一个函数,该函数接受符合给定协议的对象数组。我编写了以下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
的任何类型的数组,而不是符合某种类型的数组。