【问题标题】:Convert String Array into Int Array Swift 2?将字符串数组转换为整数数组 Swift 2?
【发布时间】:2016-01-25 16:31:33
【问题描述】:

[Xcode 7.1,iOS 9.1]

我有一个数组:var array: [String] = ["11", "43", "26", "11", "45", "40"]

我想将它(每个索引)转换为 Int,以便我可以使用它从计时器倒计时,相应的索引。

如何在 Swift 2 中将 String 数组转换为 Int 数组?

我尝试了几个链接,但没有一个有效,并且所有链接都给了我一个错误。链接中的大部分代码已被贬值或尚未更新到 swift 2,例如 toInt() 方法。

【问题讨论】:

    标签: arrays string swift int swift2


    【解决方案1】:

    使用map 函数

    let array = ["11", "43", "26", "11", "45", "40"]
    let intArray = array.map { Int($0)!} // [11, 43, 26, 11, 45, 40]
    

    UIViewController 这样的类中使用

    let array = ["11", "43", "26", "11", "45", "40"]
    var intArray = Array<Int>!
    
    override func viewDidLoad() {
      super.viewDidLoad()
      intArray = array.map { Int($0)!} // [11, 43, 26, 11, 45, 40]
    }
    

    如果数组包含不同的类型,您可以使用 flatMap (Swift 2) 或 compactMap (Swift 4.1+) 仅考虑可以转换为 Int 的项目

    let array = ["11", "43", "26", "Foo", "11", "45", "40"]
    let intArray = array.compactMap { Int($0) } // [11, 43, 26, 11, 45, 40]
    

    【讨论】:

    • map 函数没问题,但您不建议强制展开文本 array.map{ Int($0) ?? 0 } 会是更好(更安全)的选择
    • 你是对的,但问题中的给定数组无疑是一个可转换数字的数组。是否真的需要可选测试由开发人员决定。
    • 抱歉让您久等了!我的 TableViewController 给了我一个错误,说我无法转换类型为“TableViewController”的数组。 TableViewController 类有例外吗? @vadian instance member 'array' cannot be used on type TableViewController
    • 您必须将行映射到函数中,例如viewDidLoad()。将类级别的变量声明为隐式展开可选
    • 谢谢。这在对象已经在数组中时有效,因此回答了我的问题。我的问题是我从 Parse 查询,然后我想将 String 值转换为 Ints。有什么建议?无论如何,感谢您的宝贵时间!
    【解决方案2】:

    Swift 4、5:

    使用带有强制转换为 Int 的 compactMap,没有“!”的解决方案。

    let array = ["1","foo","0","bar","100"]
    let arrayInt = array.compactMap { Int($0) }
    
    print(arrayInt)
    // [1, 0, 100]
    

    【讨论】:

      【解决方案3】:

      我建议一些不同的方法

      let stringarr = ["1","foo","0","bar","100"]
      let res = stringarr.map{ Int($0) }.enumerate().flatMap { (i,j) -> (Int,String,Int)? in
          guard let value = j else {
              return nil
          }
          return (i, stringarr[i],value)
      }
      // now i have an access to (index in orig [String], String, Int) without any optionals and / or default values
      print(res)
      // [(0, "1", 1), (2, "0", 0), (4, "100", 100)]
      

      【讨论】:

        【解决方案4】:

        Swift 4、5:

        如果您想将字符串数字转换为 int 类型的数组(在我曾经经历过的特定情况下)的即时方法:

        let pinString = "123456"
        let pin = pinString.map { Int(String($0))! }
        

        你的问题是:

        let pinArrayString = ["1","2","3","4","5","6"]
        let pinArrayInt = pinArrayString.map { Int($0)! }
        

        【讨论】:

          猜你喜欢
          • 2016-11-20
          • 2019-04-21
          相关资源
          最近更新 更多