[英]How to convert NSArray to [Int] with Swift
我的問題很簡單,
let string = "1,2,3,4,5,6"
因為我想在字符串中找到最大值,並且我想以這種方式使用方法,所以我需要這樣做:
let array = string.componentsSeparatedByString(",") as [AnyObject]
let numArray = array as! [Int]
let maxNum = numArray.reduce(Int.min, combine: {max($0,$1)})
但是,“ array as![Int] ”中會出現錯誤。
fatal error: array cannot be bridged from Objective-C
如果是
let numArray = array as! [String]
可以,但是我們不能使用reduce方法。
那么,如何將帶有字符串的數組轉換為[Int]?
你可以映射數組
let string = "1,2,3,4,5,6"
let numArray = string.componentsSeparatedByString(",").map {$0.toInt()!}
您可以使用reduce
和optionals,以防止使用強制展開,如果字符串實際上不包含數字,則可能導致應用程序崩潰。
這是代碼:
let array = string.componentsSeparatedByString(",")
let initial: Int? = .None
let max = array.reduce(initial) {
let num = $1.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()).toInt()
return num > $0 ? num : $0
}
第一行將字符串拆分為字符串數組-請注意,由於該方法已經返回字符串數組,因此無需強制轉換。
通過傳遞一個可選的整數作為初始值(設置為.None
(這是nil
的同義詞))來使用reduce
方法。
傳遞給reduce
的閉包使用toInt()
將當前值轉換為整數,該整數返回一個可選值,以解決無法轉換為有效整數的字符串的問題。
接下來,如果閉包大於上一次迭代計算的值(或大於初始值),則閉包將返回轉換后的數字,否則它將返回上一次迭代的值。
請注意,比較整數和nil是完全合法的:任何整數值始終大於nil
(甚至是負值)。
此方法適用於“普通”數字列表:
let string = "1, 2, 3, 4, 5, 6, 7" // The result is 7
而且還包含具有數字和非數字的列表:
let string = "1, 2, three, 4, 5, 6, seven" // the result is 6
並包含不包含數字的列表:
let string = "one, two, three, three, four, five, six, seven" // the result is nil
let string = "1,2,3,4,5,6"
func toInt(str: String) -> Int {
return str.toInt()!
}
let numArray = map(string.componentsSeparatedByString(",") as [String], toInt)
然后, numArray
為[1, 2, 3, 4, 5, 6]
。
在Swift 2.0中 ,
let string = "1,2,3,4,5,6"
let numArray = string.componentsSeparatedByString(",").map{ Int($0)! }
在Swift 4.0中:
let string = "1,2,3,4,5,6"
let stringArray = string.split(separator: ",").map(String.init)
let intArray = stringArray.flatMap(Int.init)
intArray.max()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.