在参数类型'[ItemA]'中,'ItemA'不符合预期类型'Sortable'

vrw*_*wim 7 generics swift

我使用Swift遇到了一个奇怪的错误,但我似乎无法找到问题.我认为不应该抛出错误,我已经在操场上用下面的代码验证了这个问题.

protocol Sortable {
}

protocol ItemA: Sortable {
}

func sortItems<T: Sortable>(items: [T]) -> [T] {
    // do the sorting here
    return items
}

let list: [ItemA] = []

sortItems(items: list)
Run Code Online (Sandbox Code Playgroud)

Zde*_*pič 4

您不能传递从当前 Swift 版本 (4.1) 中的约束协议继承的另一个协议。

如果你制作ItemAa struct、 aclass或 an enum,它就会起作用。

或者

如果您将更改您的sortItems实现以简单地Sortable作为这样的参数,那么您可以使用继承自 的另一个协议Sortable,但您将丢失有关类型的信息。

func sortItems(items: [Sortable]) -> [Sortable] {
    // do the sorting here
    return items
}
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到有关此问题的更多信息。