在 Swift 2.0 中将字符转换为 Int
Convert Character to Int in Swift 2.0
我只想将 character 转换为 Int。
这应该很简单。但我还没有发现以前的答案有帮助。总会有一些错误。也许是因为我在 Swift 2.0 中尝试它。
for i in (unsolved.characters) {
fileLines += String(i).toInt()
print(i)
}
在 Swift 2.0 中,toInt()
等已被初始值设定项替换。 (在这种情况下,Int(someString)
。)
因为不是所有的字符串都可以转换为整数,所以这个初始化器是failable,这意味着它returns一个可选的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)
}
或者,对于 Swift 更高的解决方案:
let unsolved = "123abc"
let fileLines = unsolved.characters.filter({ Int(String([=11=])) != nil }).map({ Int(String([=11=]))! })
// fileLines = [1, 2, 3]
您可以使用 flatMap
进一步缩短它:
let fileLines = unsolved.characters.flatMap { Int(String([=12=])) }
flatMap
returns "an Array
containing the non-nil results of mapping transform
over self
"...所以当Int(String([=23=]))
为nil
时,结果被丢弃
其实。更简单的方法是Swift2.o中String转Int为:
let chars = Int(chars)
不确定这是否是您要尝试的...但是您当然可以轻松地将其应用到您的循环中。
这是我想出的一个即兴技巧。由于将 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
OP问题的解决方案:
let fileLines = unsolved.compactMap{ Int(String([=11=]) }
// fileLines = [1, 2, 3]
在最新的 Swift 版本中(至少在 Swift 5 中),您不需要对 String
.
进行额外的转换
Character
有 属性 wholeNumberValue
尝试将字符转换为 Int
和 returns nil
如果字符不代表和整数。
let char: Character = "5"
if let intValue = char.wholeNumberValue {
print("Value is \(intValue)")
} else {
print("Not an integer")
}
我只想将 character 转换为 Int。
这应该很简单。但我还没有发现以前的答案有帮助。总会有一些错误。也许是因为我在 Swift 2.0 中尝试它。
for i in (unsolved.characters) {
fileLines += String(i).toInt()
print(i)
}
在 Swift 2.0 中,toInt()
等已被初始值设定项替换。 (在这种情况下,Int(someString)
。)
因为不是所有的字符串都可以转换为整数,所以这个初始化器是failable,这意味着它returns一个可选的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)
}
或者,对于 Swift 更高的解决方案:
let unsolved = "123abc"
let fileLines = unsolved.characters.filter({ Int(String([=11=])) != nil }).map({ Int(String([=11=]))! })
// fileLines = [1, 2, 3]
您可以使用 flatMap
进一步缩短它:
let fileLines = unsolved.characters.flatMap { Int(String([=12=])) }
flatMap
returns "an Array
containing the non-nil results of mapping transform
over self
"...所以当Int(String([=23=]))
为nil
时,结果被丢弃
其实。更简单的方法是Swift2.o中String转Int为:
let chars = Int(chars)
不确定这是否是您要尝试的...但是您当然可以轻松地将其应用到您的循环中。
这是我想出的一个即兴技巧。由于将 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
OP问题的解决方案:
let fileLines = unsolved.compactMap{ Int(String([=11=]) }
// fileLines = [1, 2, 3]
在最新的 Swift 版本中(至少在 Swift 5 中),您不需要对 String
.
Character
有 属性 wholeNumberValue
尝试将字符转换为 Int
和 returns nil
如果字符不代表和整数。
let char: Character = "5"
if let intValue = char.wholeNumberValue {
print("Value is \(intValue)")
} else {
print("Not an integer")
}