2015-10-29 99 views
0

在我的代碼如下,winRankArray的內容都是字符串對象。我遇到的問題是,在最後設置didWinRank變量給了我以下錯誤:輸入'String?'不符合協議'Equatable'

Type 'String?' does not conform to protocol 'Equatable'

我試着刪除?,使設置卡行列看起來像var cardRank1 = deckDictionary[cardKey1].first,但是這給了我一個錯誤,說明

Value of optional type 'Array?' not unwrapped; did you mean to use '!' or '?'?

我該如何設置變量,以便產生的winRankArray沒有這個問題?

 var cardKey1 = "card\(firstRandomNumber)" 
     var cardRank1 = deckDictionary[cardKey1]?.first 

     var cardKey2 = "card\(firstRandomNumber)" 
     var cardRank2 = deckDictionary[cardKey2]?.first 

     var cardKey3 = "card\(firstRandomNumber)" 
     var cardRank3 = deckDictionary[cardKey3]?.first 

     var cardKey4 = "card\(firstRandomNumber)" 
     var cardRank4 = deckDictionary[cardKey4]?.first 

     var cardKey5 = "card\(firstRandomNumber)" 
     var cardRank5 = deckDictionary[cardKey5]?.first 

     var cardKey6 = "card\(firstRandomNumber)" 
     var cardRank6 = deckDictionary[cardKey6]?.first 

     var cardKey7 = "card\(firstRandomNumber)" 
     var cardRank7 = deckDictionary[cardKey7]?.first 

     var winRankArray = [cardRank1, cardRank2, cardRank3, cardRank4, cardRank5, cardRank6, cardRank7] 

     //func sameRank {loop through winRankArray, find 3 identical values, set winRankStatus to true} 
     let didWinRank = winRankArray.slidingWindowWithLength(4).contains{ $0.allEqual() } 
+0

什麼是'slidingWindowWithLength'回報? – t4nhpt

+0

嘗試使用'deckDictionary [cardKey1] !. first'和相同的方法。 –

+0

@DharmeshKheni說什麼,並添加適當的零檢查。此外,您正在調用的'first'屬性返回一個可選項。所以這也會返回一個'String?' –

回答

0

Type 'String?' does not conform to protocol 'Equatable'

我不這麼認爲......

var s1: String? = "alfa" 
var s2: String? = nil 
var s3: String? = "beta" 
var arr: Array<String?> = [s1, s2, s3] 
arr.contains { (str) -> Bool in // true 
    str == "alfa" 
} 
s1 == "alfa" // true 
s1 == s3  // false 
s2 == nil // true 

When adopting Equatable, only the == operator is required to be implemented. The standard library provides an implementation for !=.