【问题标题】:Convert Char in Int swift在 Int 中快速转换 Char
【发布时间】:2019-07-29 09:42:46
【问题描述】:

我正在尝试将 char 转换为 int,在 C 中它可以工作,但在 Swift 中我遇到了一些问题。在C里就不一样了,用ascii没问题。

这个函数是我的 atoi 函数的一部分。

我尝试使用 binaryInt 和 UnicodeScalar,但没有成功

func scanNumber(_ strArray: [Character], _ index: Int, _ flag: Int) -> Int {

    var resalt = 0

    while ((strArray[index] >= "0") && (strArray[index] <= "9")) {
        // flag mean plus or minus sign in strArray, if flag = 2 it's like a ["-", "1", "2", "3"]
        if flag != 2 {
            resalt *= 10
            resalt = resalt + Int(strArray[index]) //error
        } else {
            resalt *= 10
            resalt = resalt - Int(strArray[index]) //error
        }
    }
    return resalt
}

Int(strArray[index]) 返回:

Initializer 'init(_:)' 要求 'Character' 符合 'BinaryInteger'

【问题讨论】:

  • 您可以使用asciiValue 属性:Int(strArray[index].asciiValue ?? 0)

标签: swift char int converters


【解决方案1】:

这是一个使用 asciiValue 的解决方案

func scanNumber(_ strArray: [Character], _ index: Int, _ flag: Int) -> Int {

    var resalt = 0
    var arrayIndex = index

    while (arrayIndex < strArray.count && (strArray[arrayIndex] >= "0") && (strArray[arrayIndex] <= "9")) {
        guard let ascii = strArray[arrayIndex].asciiValue  else {
           return resalt
        }
        resalt *= 10

        if flag != 2 {
            resalt += Int(ascii) - 48
        } else {
            resalt -= Int(ascii) - 48

        }
        arrayIndex += 1
    }
    return resalt
}

我也修复了循环

【讨论】:

  • 谢谢! Int(ascii) - 48 我喜欢 :) 为什么我们必须考虑到这个 arrayIndex &lt; strArray.count?我认为一旦数组超出 0 和 9 的范围,循环就会被中断。
  • @Buz-pro 如果数组包含 only 数字(或以数字结尾),则 while 中的检查将超出范围。
【解决方案2】:

使用字符可以创建字符串。并且使用 String 你可以创建一个 Int。

let char: Character = "1" if let number = Int(String(char)) { // use number
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-12
    • 2020-12-15
    • 2017-03-21
    • 1970-01-01
    • 2014-11-23
    • 2018-06-16
    • 2020-01-25
    • 1970-01-01
    相关资源
    最近更新 更多