Swift:无法将受约束的协议转换为该类型的值

时间:2017-09-17 08:18:41

标签: swift casting constraints protocols

我正在尝试将方法的输入约束为符合特定协议的实例列表。在我的特定情况下,我无法控制方法,也无法更改其参数。该方法将特定类型的数组作为输入。我在想我可以将协议限制为该类型,然后传入符合该协议的实例数组。但编译器不会让我。

为什么我不能做以下事情?

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)

1 个答案:

答案 0 :(得分:0)

doSomething的{​​{1}} input[SomeClass],但您正在向其传递[SomeProtocol]SomeProtocol不是SomeClassSomeClassSomeProtocol。要满足编译器,您只需将someClasses的类型更改为[SomeClass]

let someClasses = [SomeClass(), SomeClass()]

或者您可以更改参数的要求:

func doSomething(input: [SomeProtocol])