2016-03-06 129 views
1

我想使用[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

剛剛添加了行 –

回答

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

改變Cell類的來源並不好,因爲它來自外部庫。有什麼解決方案可以使Swift數組爲Equatable? –

+0

@SemyonTikhonenko據我所知,沒有辦法使Array「Equatable」有意義。你有可能使用'[String]'中的包裝嗎? –

相關問題