下面是一段代码,其中有一个语法错误我不明白:
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.indexOf来处理什么?文档中CollectionType.indexOf的签名是
func indexOf(元素:Self.Generator.element)->Self.Index?
如果交易是[Card],Self.Generator.Element不等于Card吗?我甚至输入类型注释来检查我的变量是否具有我期望的类型。我错过了什么?(碰巧Card是一个struct,但是如果我将它改为一个类,就会得到同样的错误。)
最佳答案
问题是你没有定义一张卡等于另一张卡的含义。因此,Swift无法知道给定卡的索引在数组中是什么,因为它在看到所需卡时无法识别它。您需要将卡声明为一个可等式并满足该协议的要求。
关于arrays - 如何调用Swift Array.indexOf?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31617865/