[英]Using firstIndex(of: Element) in Swift
我在Xcode 10的Swift 4中有以下代码
var newCard = deck.randomElement()!
deck.remove(at: deck.firstIndex(of: newCard)!)
dealtCards.append(newCard)
我正在尝试从deck: [SetCard]
随机抽取一个元素deck: [SetCard]
并将其放入dealtCards: [SetCard]
我一直在浏览文档,但据我所知, func firstIndex(of element: Element) -> Int?
是Array
中存在的一种方法,所以我不明白当函数具有所需的确切行为时,为什么Xcode希望我将“ of”更改为“ where”。
我在这里想念什么?
该问题已经在其他答案中得到了解释。 仅出于完整性考虑:如果您选择随机索引而不是数组中的随机元素,则可以避免该问题并将代码简化为
if let randomIndex = deck.indices.randomElement() {
let newCard = deck.remove(at: randomIndex)
dealtCards.append(newCard)
} else {
// Deck is empty.
}
您的deck
数组元素应符合Equatable
协议,
例如,由于String
符合Equatable
协议,因此以下代码段有效,
var arr = ["1", "2", "3"]
let newCard = arr.randomElement()!
arr.remove(at: arr.firstIndex(of: newCard)!)
问题在于您的SetCard类型尚未声明为Equatable。 因此,没有办法知道卡是否存在或其索引是什么,因为与您的newCard
“匹配”的卡的概念是不确定的。
(在这一点上,编译器错误消息可能没有帮助。这是一个已知问题。已提交了错误报告 。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.