将[Int?]转换为[Int]

Ben*_*Ben 3 arrays string int swift unwrap

我有一个String,例如"7,8,9,10",我想转换为一系列Int项目,即[Int]

但是,我的代码当前给了我一个[Int?](可选整数数组).这是代码:

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

我尝试了一些东西,比如改变Int(word)到Int(word!),并添加!到年底String),但SWIFT不喜欢这些想法的样子.

我认为有一些显而易见的事情,我作为初学者做错了,但我不太确定是什么!任何帮助将不胜感激 - 谢谢!

Gwe*_*oué 8

将选项数组转换为非选项数组的经典方法是flatMap { $0 }:

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

  • 你使用flatMap是正确的,但你可以这样简化:`let years =(item ["years"] as!String).componentsSeparatedByString(",").flatMap {Int($ 0)}` (4认同)

use*_*734 6

纯粹的Swift解决方案,没有基金会的帮助

let arr = "7,8,9,10".characters.split(",").flatMap{ Int(String($0)) }
print(arr) // [7, 8, 9, 10]
Run Code Online (Sandbox Code Playgroud)

  • @Ben Foundation可在Apple平台上使用.开源基金会目前尚未完全实施.我希望通过Swift3.0,情况会因社区的优势而改变.即使在苹果平台上,由于"自由桥接",有时也很难看出"错误".这取决于你,你更喜欢什么,我尽量避免在我自己的代码中使用Foundation,至少目前是这样.纯Swift代码的速度也可能更好(取决于您的实现) (2认同)