2015-09-07 24 views
1

我想檢查一下數組是否包含一個字符串數組。我的錯誤消息指出:爲什麼我不能檢查我的數組數組是否包含特定的數組?

var allCards = [[String]]() 
var exp1 = [String]() 

if !contains(allcards, exp1) { 
    allCards.append(exp1) 
} 

「爲 '包含' 接受型 '([((字符串)])]),[(字符串)])' 參數列表找不到該超載」

這是怎麼回事!?

+0

中使用的類包含方法應該實現Equatable協議。因爲需要檢查兩個元素是否相等。 – teamnorge

回答

7

Array不符合Equatable協議,因此

/// Return `true` iff `x` is in `seq`. 
func contains<S : SequenceType where S.Generator.Element : Equatable>(seq: S, x: S.Generator.Element) -> Bool 

不能在此處使用。您可以使用基於謂詞變

/// Return `true` iff an element in `seq` satisfies `predicate`. 
func contains<S : SequenceType, L : BooleanType>(seq: S, predicate: @noescape (S.Generator.Element) -> L) -> Bool 

代替:

var allCards = [[String]]() 
var exp1 = [String]() 

if !contains(allCards, { $0 == exp1 }) { 
    allCards.append(exp1) 
} 

因爲==Equatable元素的數組定義。

1

更新Swift2:現在

處於因此Sequence一個協議擴展中定義的函數:

var allCards = [[String]]() 
var exp1 = [String]() 

if !allCards.contains({ $0 == exp1 }) { 
    allCards.append(exp1) 
} 
相關問題