Aar*_*ron 28 int character swift swift-playground swift2
我只想将一个角色转换成一个Int.
这应该很简单.但我没有发现以前的答案有用.总有一些错误.也许是因为我在Swift 2.0中尝试它.
for i in (unsolved.characters) {
fileLines += String(i).toInt()
print(i)
}
Run Code Online (Sandbox Code Playgroud)
Aar*_*ger 47
在Swift 2.0 toInt()等中,已经被初始化程序取代.(在这种情况下,Int(someString).)
因为并非所有字符串都可以转换为int,所以这个初始化程序是可用的,这意味着它返回一个可选的int(Int?)而不是一个Int.最好的办法是打开这个可选项if let.
我不确定你的目的是什么,但这段代码适用于Swift 2,并完成了我认为你想要做的事情:
let unsolved = "123abc"
var fileLines = [Int]()
for i in unsolved.characters {
let someString = String(i)
if let someInt = Int(someString) {
fileLines += [someInt]
}
print(i)
}
Run Code Online (Sandbox Code Playgroud)
或者,对于Swiftier解决方案:
let unsolved = "123abc"
let fileLines = unsolved.characters.filter({ Int(String($0)) != nil }).map({ Int(String($0))! })
// fileLines = [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
你可以用以下方法缩短这个flatMap:
let fileLines = unsolved.characters.flatMap { Int(String($0)) }
Run Code Online (Sandbox Code Playgroud)
flatMap返回"一个Array含有映射的非零结果transform在self" ......所以当Int(String($0))是nil时,结果被丢弃.
这是我想出的一些即兴技巧.因为它可能会非常棘手转换Character到Int,但是你可以很容易地转换String到Int
这样做:
fileLines = Int(String(i))!
Run Code Online (Sandbox Code Playgroud)
当然这不是很好的优化,但对于像你这样的情况,它可以做到这一点.