2015-10-26 34 views
11

[Xcode 7.1, iOS 9.1]Chuyển đổi chuỗi mảng thành Int Array Swift 2?

Tôi có một mảng: var array: [String] = ["11", "43", "26", "11", "45", "40"]

Tôi muốn chuyển đổi đó (mỗi chỉ số) vào một Int vì vậy tôi có thể sử dụng nó để đếm ngược từ một bộ đếm thời gian, tương ứng của Mục lục .

Làm cách nào tôi có thể chuyển đổi mảng String thành một mảng Int trong Swift 2?

Tôi đã thử một số liên kết, không có liên kết nào hoạt động và tất cả chúng đều cho tôi lỗi. Hầu hết mã từ các liên kết đều bị khấu hao hoặc chưa được cập nhật thành nhanh 2, chẳng hạn như phương thức toInt().

Trả lời

34

Sử dụng map chức năng

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

Trong một lớp học như UIViewController sử dụng

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

Nếu mảng chứa các loại khác nhau mà bạn có thể sử dụng flatMap để chỉ xem xét các mặt hàng có thể được chuyển đổi sang Int

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

chức năng bản đồ là ok nhưng bạn không nên khuyên bạn nên buộc mảng văn bản unwrap.map {Int ($ 0) ?? 0} sẽ là một lựa chọn tốt hơn (an toàn hơn) –

+1

Bạn nói đúng, nhưng mảng được đưa ra trong câu hỏi chắc chắn là một mảng các số có thể chuyển đổi. Nó tùy thuộc vào nhà phát triển để xử lý loại thử nghiệm tùy chọn có thực sự cần thiết hay không. – vadian

+0

Xin lỗi vì đã đợi! TableViewController của tôi là cho tôi một lỗi nói rằng tôi không thể chuyển đổi mảng của tôi trên loại "TableViewController". Có một ngoại lệ cho lớp TableViewController? @vadian 'instance member 'array' không thể được sử dụng trên kiểu TableViewController' – lukaivicev

1

tôi đề xuất một cách tiếp cận khác một chút khác nhau

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)] 
Các vấn đề liên quan