Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
636 views
in Technique[技术] by (71.8m points)

swift - Why can't I check to see if my array of arrays contains a specific array?

I'm trying to check to see if an array of arrays contains an array of Strings. My error message says:

"Cannot find an overload for 'contains' that accepts an argument list of type '([([(String)])]), [(String)])'"

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

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

What's going on!?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Array does not conform to the Equatable protocol, therefore

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

cannot be used here. You can use the predicate-based variant

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

instead:

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

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

because == is defined for arrays of Equatable elements.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...