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

问题描述:

我想使用[String]作为通用参数。类型'[String]'不符合协议'Equatable'

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 
} 
+0

这不是重复。我已经尝试了另一个问题的答案,并添加了一些代码来比较数组,并且它并没有帮助case [String]仍然不符合Equatable协议 –

+0

请在出现错误的位置添加代码块(并指出该行你在哪里得到它)。 – courteouselk

+0

刚刚添加了行 –

阵列不符合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 
} 
+0

改变Cell类的来源并不好,因为它来自外部库。有什么解决方案可以使Swift数组为Equatable? –

+0

@SemyonTikhonenko据我所知,没有办法使Array“Equatable”有意义。你有可能使用'[String]'中的包装吗? –