类型'[String]'不符合协议'Equatable'

时间:2016-03-06 21:35:35

标签: swift

我想将[String]用作通用参数。

public class Cell<T : Equatable> {}

这是我收到错误的一行:

class TagsCell : Cell<[String]>, CellType {
}

我已添加此代码,但它无效

public func == (lhs: [String], rhs: [String]) -> Bool {
    return lhs.count == rhs.count && (zip(lhs, rhs).contains { $0.0 != $0.1 }) == false
}

1 个答案:

答案 0 :(得分:1)

数组不符合Swift中的Equatable。符合Equatable意味着此类型存在==个运算符,但不反之。因此,即使您为==类型实施[String],也无法使用Cell<[String]>

在您的情况下,我建议使用以下协议:

public class Cell<T : SequenceType where T.Generator.Element: Equatable> {}

class TagsCell : Cell<[String]> {
}

使用[String]中的包装:

public class Cell<T : Equatable> {}

struct StringArray: Equatable {
    var value: [String]
}

class TagsCell : Cell<StringArray> {
}

func ==(lhs: StringArray, rhs: StringArray) -> Bool {
    return lhs.value == rhs.value
}