【问题标题】:Type 'String?' does not conform to protocol 'Equatable'键入“字符串?”不符合协议'Equatable'
【发布时间】:2015-10-29 04:18:07
【问题描述】:

在我下面的代码中,winRankArray 的内容都是字符串对象。我遇到的问题是在最后设置 didWinRank 变量会给我以下错误:

键入“字符串?”不符合协议'Equatable'

我已经尝试删除 ?,这样设置卡等级看起来像 var cardRank1 = deckDictionary[cardKey1].first,但这给了我一个错误提示

可选类型“数组?”的值未拆封;你的意思是用'!'还是“?”?

如何设置变量以使生成的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() }

【问题讨论】:

  • 什么是slidingWindowWithLength返回?
  • 试试deckDictionary[cardKey1]!.first,对所有人都一样。
  • @DharmeshKheni 所说的内容,并添加适当的 nil 检查。此外,您正在调用的 first 属性返回一个可选值。所以这也会返回一个String?

标签: arrays swift


【解决方案1】:

键入“字符串?”不符合协议'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

采用 Equatable 时,只需要 == 运算符 实施的。标准库提供了 != 的实现。

【讨论】:

    猜你喜欢
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多