我只想将字符转换为 Int 。
这应该很简单。但我还没有发现以前的答案有用。总有一些错误。也许是因为我在Swift 2.0中尝试过它。
for i in (unsolved.characters) {
fileLines += String(i).toInt()
print(i)
}
答案 0 :(得分:45)
在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)
}
或者,对于Swiftier解决方案:
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
&#34的非零结果; ...所以当Int(String($0))
时是nil
,结果将被丢弃。
答案 1 :(得分:8)
这是我想出的一些即兴技巧。由于将Character
转换为Int
可能会非常棘手,但您可以轻松地将String
转换为Int
这样做:
fileLines = Int(String(i))!
当然这不是很好的优化,但对于像你这样的情况,它可以做到这一点。
答案 2 :(得分:3)
实际上。一种更简单的方法是在Swift 2.o中将String转换为Int:
let chars = Int(chars)
不确定这是不是你想要的......但是你可以轻松地将它应用到你的循环中。
答案 3 :(得分:3)
Swift 4解决方案
将comment["issue"]["pull_request"]
转换为Character
:
String
解决OP问题:
let digit = Int(String("1"))!
//Don't force unwrap this if you're not 100% sure your character is a digit
答案 4 :(得分:0)
在最新的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")
}