这是一段代码,其中出现我不理解的语法错误:
let deal:[Card] = self.cards
for hand in hands {
var data:[Int] = []
for card:Card in hand.cards {
let idx = deal.indexOf(card)
data.append(idx!)
}
}
我收到的错误是“无法使用类型为‘(Card)’的参数调用‘indexOf’”。我完全不明白这一点。 deal是一张[卡片]。如果不是卡片,我应该用什么调用 deal.indexOf?文档中 CollectionType.indexOf 的签名是
func indexOf(element: Self.Generator.Element) -> Self.Index?
如果交易是一张 [Card],Self.Generator.Element 不等于 Card 吗?我什至放入类型注释来检查我的变量是否具有我期望的类型。我错过了什么? (碰巧 Card 是一个结构,但如果我将它更改为一个类,我会得到同样的错误。)
最佳答案
问题是您没有定义一张卡片与另一张卡片相等的含义。因此,Swift 无法知道给定 Card 在数组中的索引是什么,因为它无法在看到所需的 Card 时识别它。您需要将 Card 声明为 Equatable 并满足该协议(protocol)的要求。
关于arrays - 如何调用 Swift Array.indexOf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31617865/