web-dev-qa-db-ja.com

文字列配列をInt配列に変換Swift 2?

[Xcode 7.1、iOS 9.1]

配列があります:_var array: [String] = ["11", "43", "26", "11", "45", "40"]_

その(各インデックス)をIntに変換したいので、それを使用して、各インデックスのタイマーからカウントダウンします。

Swift 2のString配列をInt配列に変換するにはどうすればよいですか?

いくつかのリンクを試しましたが、どれも機能せず、すべてのリンクでエラーが発生しました。リンクからのコードのほとんどは、減価償却されているか、Swift 2、toInt()メソッドなど)に更新されていません。

17
Lukesivi

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]
46
vadian

私は少し異なるアプローチをお勧めします

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)]
1
user3441734