在Swift中使用firstIndex(of:Element)

时间:2018-12-30 17:59:29

标签: ios arrays swift

在Swift 4中,我在Xcode 10上有以下代码

        var newCard = deck.randomElement()!

        deck.remove(at: deck.firstIndex(of: newCard)!)
        dealtCards.append(newCard)

我正在尝试从deck: [SetCard]中提取一个随机元素并将其放入dealtCards: [SetCard]

但是,Xcode给我以下错误: Xcode error

我一直在浏览文档,但据我所知,func firstIndex(of element: Element) -> Int?Array中存在的一种方法,因此我不明白Xcode为什么要我更改'当功能具有我想要的确切行为时。

我在这里想念什么?

3 个答案:

答案 0 :(得分:3)

该问题已经在其他答案中得到了解释。仅出于完整性考虑:如果您选择随机 index 而不是数组中的随机元素,则可以避免该问题并将代码简化为

prefresh

答案 1 :(得分:1)

您的AccountManager数组元素应符合deck协议

例如,由于Equatable符合String协议,因此以下代码段有效,

Equatable

答案 2 :(得分:1)

问题在于您的SetCard类型尚未声明为Equatable。因此,无法知道卡是否存在或其索引是什么,因为未定义“匹配” var arr = ["1", "2", "3"] let newCard = arr.randomElement()! arr.remove(at: arr.firstIndex(of: newCard)!) 的卡的概念。

(编译器错误消息在这一点上可能没有帮助。这是一个已知问题。Bug reports已提交。)