在 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")
}