在Swift 2.0中将Character转换为Int

时间:2015-06-11 03:37:08

标签: swift int character swift-playground swift2

我只想将字符转换为 Int

这应该很简单。但我还没有发现以前的答案有用。总有一些错误。也许是因为我在Swift 2.0中尝试过它。

for i in (unsolved.characters) {
  fileLines += String(i).toInt()
  print(i)
}

5 个答案:

答案 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")
}