【问题标题】:How to iterate through a tuple array with for loop in Swift如何在 Swift 中使用 for 循环遍历元组数组
【发布时间】:2023-03-05 15:30:01
【问题描述】:

我有一个元组数组定义为:

var points2D:Array=[(1,1),(2,3),(4,3),(9,5),(3,3),(7,6),(5,6)]

当尝试像这样经历它时:

func foo(){
    for (x,y) in points2D{
    }
}

我收到此错误消息:

'τ_0_0' is not convertible to '(@lvalue Array, @lvalue Array)'

这是什么意思,我做错了什么?

【问题讨论】:

  • 如果那是你的实际代码似乎没有什么问题......
  • 不知道它是否相关,它在操场内,完整的错误消息是:无法将'Array<_>'类型的值分配给'Array'/var/folders/ 04/3c4h144j2cngl5c48p6ms7y40hdhk0/T/./lldb/7684/playground520.swift:33:22: 错误:'τ_0_0' 不可转换为'(@lvalue Array, @lvalue Array)' for (x,y) in points2D{
  • 看起来代码不是问题所在。我还在操场上对其进行了测试,并且可以正常工作。
  • 看起来您的游乐场已损坏或其他原因; type Array/var/folders... = 没有 bueno。
  • 我创建了一个新的游乐场,编写了相同的代码,但仍然出现错误。我实际上有一个函数内部的 for,我将编辑问题。

标签: arrays swift tuples


【解决方案1】:

points2D的类型不是Array,而是Array&lt;(Int,Int)&gt;, 所以让 Swift 推断类型:

 var points2D = [(1,1),(2,3),(4,3),(9,5),(3,3),(7,6),(5,6)]

或明确设置正确的类型:

var points2D:Array<(Int,Int)> = [(1,1),(2,3),(4,3),(9,5),(3,3),(7,6),(5,6)]

【讨论】:

  • 有效!但是当我将它移动到函数内部时有什么区别?为什么在同一个函数范围内定义为一个数组就足够了?为什么在不同范围内声明时不推断 ?
  • 我也想知道为什么它在我们所有的操场上都有效(见问题 cmets),而不是 OP。
  • @LeonardoMarques 请注意,您的代码在操场上对我有用。我不能说我已经在文档中的某个地方读到过这种行为(虽然我可能错过了一些东西)。所以我在一个真实的项目中对此进行了测试,并没有奏效,所以我根据它做出了我的答案。
  • @TroyT 不能说为什么它对我们有用,而不是对 OP。可能是他的操场有问题,或者问题与 Xcode 的版本有关......
猜你喜欢
  • 2017-01-02
  • 1970-01-01
  • 2021-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多