繁体   English   中英

在Swift中使用firstIndex(of:Element)

[英]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]

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

我一直在浏览文档,但据我所知, 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM