arrays - 如何调用 Swift Array.indexOf?

标签 arrays swift

这是一段代码,其中出现我不理解的语法错误:

  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/

相关文章:

php - 字符串和变量的 var_dump() 未显示所需结果

ios - 用户登录后更新 Root View Controller + iOS 13 及更高版本

ios - CGAffineTransform 在其他 View 上

ios - Swift PDFKit 分页无法正常工作

ios - Firebase 更新数组值或创建新数组值

c - C 中的字符串解析、存储和读取

javascript - 尝试在 Raphael 对象上使用查询每个循环

ios - 插入数千条记录时 CoreData(swift) 内存问题

ios - 使用 Xcode 9 和 Swift 4 本地化应用程序的最佳方式?

Ruby Array concat 与 + 速度?