Lukesivi
Lukesivi

Reputation: 2226

Convert String Array into Int Array Swift 2?

[Xcode 7.1, iOS 9.1]

I have an array: var array: [String] = ["11", "43", "26", "11", "45", "40"]

I want to convert that (each index) into an Int so I can use it to countdown from a timer, respective of the index.

How can I convert a String array into an Int Array in Swift 2?

I've tried several links, none have worked and all of them have given me an error. Most of the code from the links is depreciated or hasn't been updated to swift 2, such as the toInt() method.

Upvotes: 24

Views: 37789

Answers (5)

YanSte
YanSte

Reputation: 10839

Swift 4, 5:

Use compactMap with cast to Int, solution without '!'.

'compactMap' filters nil values and applies a transformation.

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

print(arrayInt)
// [1, 0, 100]

Upvotes: 12

MD Murad Hossain
MD Murad Hossain

Reputation: 1

A slightly different example

let digitNames = [0: "Zero", 1: "One", 2:"Two", 3: "Three",
                  4:"Four",5:"Five", 6: "Six", 7: "Seven", 8: "Eight", 9: "Nine", 10:"Ten"

]

let numbers = [16,58,510]
let strings = numbers.map { (number) -> String in
    var number = number
    var output = ""
    repeat {
        output = digitNames[number % 10]! + output
        number /= 10
        
    } while number > 0
            return (output)
}

print(strings)


// strings is inferred to be of type [String]

// its value is ["OneSix", "FiveEight", "FiveOneZero"]

Upvotes: 0

Pengguna
Pengguna

Reputation: 4941

Swift 4, 5:

The instant way if you want to convert string numbers into arrays of type int (in a particular case i've ever experienced):

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

And for your question is:

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

Upvotes: 4

vadian
vadian

Reputation: 285079

Use the map function

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

Within a class like UIViewController use

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]
}

If the array contains different types you can use flatMap (Swift 2) or compactMap (Swift 4.1+) to consider only the items which can be converted to Int

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

Upvotes: 74

user3441734
user3441734

Reputation: 17534

i suggest a little bit different approach

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

Upvotes: 1

Related Questions