2015-12-30 279 views
3

我有String,例如, "7,8,9,10",我想轉換成的Int元素的數組即[Int]將[Int?]轉換爲[Int]

然而,我的代碼目前給我一個[Int?]代替(可選整數數組)。下面是代碼:

let years = (item["years"] as! String) 
        .componentsSeparatedByString(",") 
        .map { word in Int(word) } 

我嘗試了一些東西,比如改變Int(word)Int(word!),並加入到!String)結束,但SWIFT不喜歡這些想法的樣子。

我認爲有一些明顯的我作爲初學者做錯了,但我不太確定是什麼!任何幫助將不勝感激 - 謝謝!

回答

8

一個經典的方式把自選的陣列到非自選的數組是flatMap { $0 }

let years = ...map { word in Int(word) }.flatMap { $0 }

+4

你是正確的使用flatMap,但你可以這樣簡化:'let years =(item [「years」] as!) .componentsSeparatedByString(「,」) 。 flatMap {Int($ 0)}' – ebluehands

+0

準確,@ebluehands,謝謝!請指教 –

+0

,需要導入Foundation(componentsSeparatedByString)。對於'純粹'斯威夫特看到我的答案 – user3441734

6

純斯威夫特的解決方案,而無需基金會

幫助
let arr = "7,8,9,10".characters.split(",").flatMap{ Int(String($0)) } 
print(arr) // [7, 8, 9, 10] 
+0

一個很好的乾淨選擇 - 只是爲了幫助我理解斯威夫特,避免基金會有什麼特別的優勢,或者它只是另一種選擇有相同的結果嗎? – Ben

+2

@Ben Foundation可在蘋果平臺上使用。目前開源基金會尚未完全實施。我希望藉助Swift3.0,社區的優勢將會改變。即使在蘋果平臺上,有時也很難看到由於「自由橋接」而導致的「錯誤」。這取決於你,你更喜歡什麼,我儘可能在自己的代碼中儘可能地避免基金會,至少現在是這樣。純Swift代碼的速度也可能更好(取決於您的實現) – user3441734