在Swift 4中,我在Xcode 10上有以下代码
var newCard = deck.randomElement()!
deck.remove(at: deck.firstIndex(of: newCard)!)
dealtCards.append(newCard)
我正在尝试从deck: [SetCard]
中提取一个随机元素并将其放入dealtCards: [SetCard]
我一直在浏览文档,但据我所知,func firstIndex(of element: Element) -> Int?
是Array
中存在的一种方法,因此我不明白Xcode为什么要我更改'当功能具有我想要的确切行为时。
我在这里想念什么?
答案 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已提交。)