在 Int 中快速转换 Char
Posted
技术标签:
【中文标题】在 Int 中快速转换 Char【英文标题】:Convert Char in Int swift 【发布时间】: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)
【参考方案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 < strArray.count
?我认为一旦数组超出 0 和 9 的范围,循环就会被中断。
@Buz-pro 如果数组包含 only 数字(或以数字结尾),则 while
中的检查将超出范围。【参考方案2】:
使用字符可以创建字符串。并且使用 String 你可以创建一个 Int。
let char: Character = "1"
if let number = Int(String(char))
// use number
【讨论】:
以上是关于在 Int 中快速转换 Char的主要内容,如果未能解决你的问题,请参考以下文章