我只是想将一个字符转换为一个整数。
这应该很简单。但是我没有找到之前的答案有用。总会出现一些错误。也许是因为我在尝试Swift 2.0。
for i in (unsolved.characters) {
fileLines += String(i).toInt()
print(i)
}
我只是想将一个字符转换为一个整数。
这应该很简单。但是我没有找到之前的答案有用。总会出现一些错误。也许是因为我在尝试Swift 2.0。
for i in (unsolved.characters) {
fileLines += String(i).toInt()
print(i)
}
在Swift 2.0中,toInt()
等方法已被替换为初始化器(例如:Int(someString)
)。由于并非所有的字符串都能转换成整数,因此该初始化器是可失败的,这意味着它返回一个可选整数(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
时,结果会被丢弃。
fileLines += [someInt]
。 - Aaron Brager这是我想到的一种即兴技巧。由于将Character
转换为Int
可能会有些棘手,但您可以轻松地将String
转换为Int
,因此可以这样做:
fileLines = Int(String(i))!
Swift 4解决方案
将一个Character
转换为String
的方法:
let digit = Int(String("1"))!
//Don't force unwrap this if you're not 100% sure your character is a digit
let fileLines = unsolved.compactMap{ Int(String($0) }
// fileLines = [1, 2, 3]
Character
转换为String
。
Character
具有属性wholeNumberValue
,它尝试将字符转换为Int
,如果该字符不能表示整数,则返回nil
。let char: Character = "5"
if let intValue = char.wholeNumberValue {
print("Value is \(intValue)")
} else {
print("Not an integer")
}
let chars = Int(chars)
不确定这是否是您想要的...但您当然可以轻松将其应用于您的循环。
chars
不能既作为新创建常量的名称,又作为 Int
函数的参数。 - Luca Angeletti