【问题标题】:Iterate an array w/ explicit object type in Swift在 Swift 中迭代带有显式对象类型的数组
【发布时间】:2014-06-02 22:10:02
【问题描述】:

我有一个数组:

let individualScores = [75, 43, 103, 87, 12]

我这样迭代:

for score in individualScores {

}

但是,有没有办法显式声明对象类型?我认为它会在以后使用自定义对象或其他原因时派上用场。比如:

for Integer score in individualScores {

}

【问题讨论】:

    标签: swift


    【解决方案1】:

    当你输入一个变量时,你会这样做:

    var score: Int
    

    你在一个循环中做同样的事情:

    for score: Int in individualScores {
    
    }
    

    在这方面似乎相当一致。

    【讨论】:

    • 在 Swift 2.0 中执行此操作时,还有其他人从编译器中获得 segfault 11 吗?我发现我必须自己在下一行中投射它......
    • @elsurudo 编译器中的段错误是编译器错误(可能是“我们尚未实现解析此语法”错误)。
    • 是的,当然。我一直在找到一堆这样的东西,尽管在最新的 Xcode GM 中稍微少了一些。如果我不是那么懒惰并且有时间我会归档一些雷达,但是唉......
    • @elsurudo 是的,当我进行此迭代时,这里有相同的 segfault 11... 什么鬼 Swift :(
    • 简单类型(如Int)可以工作,但在 Xcode 7.0 中任何更复杂的类型都会导致编译器出现段错误
    【解决方案2】:

    有可能

    let individualScores:Int[] = [75, 43, 103, 87, 12]
    
    for score:Int in individualScores {
    
    }
    

    【讨论】:

    • 在某些时候,Sw​​ift 一定发生了变化,因为一个教程让我做let possibleTipsExplicit:[Double] = [0.15, 0.18, 0.20],但是当我使用let possibleTipsExplicit:Double[] = [0.15, 0.18, 0.20] 时,你的示例修复了我的错误。甚至 Apple 自己网站上的示例也是错误的版本。
    【解决方案3】:

    是的。如果您愿意,可以显式指定类型。

    let individualScores = [75, 43, 103, 87, 12]
    
    for score: Int in individualScores {
        println(score)
    }
    

    【讨论】:

      【解决方案4】:

      显式类型声明后跟一个带冒号的标识符声明。

      for score: Int in individualScores {
          // ...
      }
      
      let π: Double = 3.1415926535897932
      var x: Int = 10
      

      您可以阅读它“x 是一个 Int”。见A Swift Tour

      无论您是否声明类型,循环变量 (score) 都是显式且强类型的——它来自您正在迭代的数组的类型。 Swift 知道 individualScoresInt[],是 Array<Int> 的缩写,因为你用整数文字声明了它。有关其工作原理的更多信息,请参阅Generics

      【讨论】:

        猜你喜欢
        • 2014-08-05
        • 2018-10-08
        • 1970-01-01
        • 2011-04-29
        • 1970-01-01
        • 1970-01-01
        • 2016-06-03
        • 1970-01-01
        相关资源
        最近更新 更多