我只想将字符转换为Int。
这应该很简单。但我还没有发现以前的答案有帮助。总是有一些错误。也许是因为我正在 Swift 2.0 中尝试它。
for i in (unsolved.characters) {
fileLines += String(i).toInt()
print(i)
}
我只想将字符转换为Int。
这应该很简单。但我还没有发现以前的答案有帮助。总是有一些错误。也许是因为我正在 Swift 2.0 中尝试它。
for i in (unsolved.characters) {
fileLines += String(i).toInt()
print(i)
}
在 Swift 2.0 中toInt()
, 等已被初始化器取代。(在这种情况下,Int(someString)
。)
因为并非所有字符串都可以转换为整数,所以这个初始化程序是failable,这意味着它返回一个可选的 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)
}
或者,对于更快捷的解决方案:
let unsolved = "123abc"
let fileLines = unsolved.characters.filter({ Int(String($0)) != nil }).map({ Int(String($0))! })
// fileLines = [1, 2, 3]
您可以通过以下方式进一步缩短flatMap
:
let fileLines = unsolved.characters.flatMap { Int(String($0)) }
flatMap
返回“一个包含映射的Array
非零结果”......所以当是时,结果被丢弃。transform
self
Int(String($0))
nil
这是我想出的一个即兴技巧。由于转换Character
为可能很棘手Int
,但您可以轻松地转换String
为Int
:
fileLines = Int(String(i))!
当然,这不是很好的优化,但对于像你这样的情况,它可以做到这一点。
在最新的 Swift 版本中(至少在 Swift 5 中),您不需要对String
.
Character
具有wholeNumberValue
尝试将字符转换为并在字符不代表整数Int
时返回的属性。nil
let char: Character = "5"
if let intValue = char.wholeNumberValue {
print("Value is \(intValue)")
} else {
print("Not an integer")
}
实际上。一个更简单的方法是在 Swift 2.o 中将 String 转换为 Int 是:
let chars = Int(chars)
不确定这是否是您要尝试的...但是您当然可以轻松地将其应用于循环。
斯威夫特 4 解决方案
要将 a 转换Character
为 a String
:
let digit = Int(String("1"))!
//Don't force unwrap this if you're not 100% sure your character is a digit
OP问题的解决方案:
let fileLines = unsolved.compactMap{ Int(String($0) }
// fileLines = [1, 2, 3]