【发布时间】:2020-08-27 21:47:50
【问题描述】:
我想编写一个函数,它接受一个符合给定协议的对象数组。我编写了以下 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';只有结构/枚举/类类型可以符合协议”。
我相信这个错误正在发生,因为该函数需要一个符合协议的对象数组,而不是协议数组,但我不知道如何以另一种方式做到这一点。
有人可以帮忙解决这个问题吗?
提前致谢!
【问题讨论】:
-
你只是不需要泛型类型
T。将您的功能更改为此func execute(requests: [Request]) {} -
你真的需要在同一个集合中混合不同类型的对象吗?请注意,使用协议作为元素类型,只有协议所需的属性才能在该方法中访问。