问题描述
我只想将 character 转换为 Int.
I just want to convert a character into an Int.
这应该很简单.但我还没有发现以前的答案有帮助.总是有一些错误.也许是因为我正在 Swift 2.0 中尝试它.
This should be simple. But I haven't found the previous answers helpful. There is always some error. Perhaps it is because I'm trying it in Swift 2.0.
for i in (unsolved.characters) {
fileLines += String(i).toInt()
print(i)
}
推荐答案
在 Swift 2.0 中,toInt()
等已被替换为初始化器.(在这种情况下,Int(someString)
.)
In Swift 2.0, toInt()
, etc., have been replaced with initializers. (In this case, Int(someString)
.)
因为不是所有的字符串都可以转换成int,所以这个初始化器是failable的,也就是说它返回一个可选的int(Int?
)而不仅仅是一个 Int
.最好的办法是使用 if let
解开这个可选项.
Because not all strings can be converted to ints, this initializer is failable, which means it returns an optional int (Int?
) instead of just an Int
. The best thing to do is unwrap this optional using if let
.
我不确定你到底想要什么,但这段代码在 Swift 2 中工作,并完成了我认为你正在尝试做的事情:
I'm not sure exactly what you're going for, but this code works in Swift 2, and accomplishes what I think you're trying to do:
let unsolved = "123abc"
var fileLines = [Int]()
for i in unsolved.characters {
let someString = String(i)
if let someInt = Int(someString) {
fileLines += [someInt]
}
print(i)
}
或者,对于更快捷的解决方案:
Or, for a Swiftier solution:
let unsolved = "123abc"
let fileLines = unsolved.characters.filter({ Int(String($0)) != nil }).map({ Int(String($0))! })
// fileLines = [1, 2, 3]
您可以使用 flatMap
进一步缩短它:
You can shorten this more with flatMap
:
let fileLines = unsolved.characters.flatMap { Int(String($0)) }
flatMap
返回一个 Array
,其中包含将 transform
映射到 self
的非零结果"……所以当 Int(String($0))
为 nil
时,结果被丢弃.
flatMap
returns "an Array
containing the non-nil results of mapping transform
over self
"… so when Int(String($0))
is nil
, the result is discarded.
这篇关于在 Swift 2.0 中将字符转换为 Int的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!