【问题标题】:Convert Character to Int in Swift 2.0在 Swift 2.0 中将字符转换为 Int
【发布时间】:2015-08-26 13:51:55
【问题描述】:

我只想将 character 转换为 Int

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

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

【问题讨论】:

  • 我投票决定将此问题作为离题结束,因为该问题与 Swift 编译器的旧版本和不受支持的版本有关

标签: swift int character swift-playground swift2


【解决方案1】:

在 Swift 2.0 中,toInt() 等已被替换为初始化程序。 (在这种情况下,Int(someString)。)

因为不是所有的字符串都可以转换为整数,所以这个初始化器是failable,这意味着它返回一个可选的int (Int?) 而不仅仅是一个@987654324 @。最好的办法是使用 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 对我来说是一个整数数组。 var fileLines: [Int] = [](表示fileLines不能使用+=)
  • 可以使用append方法,也可以使用fileLines += [someInt]
【解决方案2】:

这是我想出的一个即兴技巧。因为将Character 转换为Int 可能会很棘手,但您可以轻松地将String 转换为Int 这样做:

fileLines = Int(String(i))!

当然,这不是很好的优化,但对于像你这样的情况,它可以做到这一点。

【讨论】:

    【解决方案3】:

    其实。一个更简单的方法是在 Swift 2.o 中将 String 转换为 Int 是:

    let chars = Int(chars)
    

    不确定这是否是您要尝试的...但您当然可以轻松地将其应用到您的循环中。

    【讨论】:

    • 这看起来容易多了。
    • chars不能既是新创建的常量又是Int的参数。
    【解决方案4】:

    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
    

    OPs问题的解决方案:

    let fileLines = unsolved.compactMap{ Int(String($0) }
    // fileLines = [1, 2, 3]
    

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-19
        • 2015-10-11
        • 2016-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多