我正在尝试将方法的输入约束为符合特定协议的实例列表。在我的特定情况下,我无法控制方法,也无法更改其参数。该方法将特定类型的数组作为输入。我在想我可以将协议限制为该类型,然后传入符合该协议的实例数组。但编译器不会让我。
为什么我不能做以下事情?
protocol SomeProtocol where Self: SomeClass {
}
class SomeClass: SomeProtocol {
}
func doSomething(input: [SomeClass]) {
}
let someClasses: [SomeProtocol] = [SomeClass(), SomeClass()]
// Cannot convert value of type '[SomeProtocol]' to expected argument type '[SomeClass]'
doSomething(input: someClasses)
答案 0 :(得分:0)
doSomething
的{{1}} input
是[SomeClass]
,但您正在向其传递[SomeProtocol]
。 SomeProtocol
不是SomeClass
,SomeClass
是SomeProtocol
。要满足编译器,您只需将someClasses
的类型更改为[SomeClass]
:
let someClasses = [SomeClass(), SomeClass()]
或者您可以更改参数的要求:
func doSomething(input: [SomeProtocol])