将一组符合协议的对象传递给函数
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
的任何类型的数组,而不是符合
的一种类型的数组。
我想编写一个函数,它接受一组符合给定协议的对象。我写了以下游乐场代码:
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
的任何类型的数组,而不是符合