2015-12-30 186 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