在Swift中将字符转换为Int

我正在开发一个项目,其中包括使用DammalgorithmvalidationIntinput的校验和。 我已经设法创build一个操作表,我的访问表中的值的方法包括传递临时值和数字作为列值传入。 恩。

self.tableToUse[interim,checkSumArray[i]] 

不幸的是,当我试图将数字从我的input传递到get / set方法,我找不到将字符转换为Ints的方法时,我碰到了一个麻烦。

  func encode(number: Int) -> Int{ var checkSumArray = [Int]() if number > 99999999 { println("number is too large") return 0 } else if number < 0 { println("invalid input") return 0 } else { checkSumArray.append(number%(10)) checkSumArray.append((number%(100)-checkSumArray[0])/10) checkSumArray.append((number%(1000)-checkSumArray[1])/100) checkSumArray.append((number%(10000)-checkSumArray[2])/1000) checkSumArray.append((number%(100000)-checkSumArray[3])/10000) checkSumArray.append((number%(1000000)-checkSumArray[4])/100000) checkSumArray.append((number%(10000000)-checkSumArray[5])/1000000) checkSumArray.append((number%(100000000)-checkSumArray[6])/10000000) checkSumArray = checkSumArray.reverse() var interim: Int = 0 for i in 0..<checkSumArray.count{ interim = self.tableToUse[interim,checkSumArray[i]] } return interim } } 

正如你所看到的,我不得不采取一个非常讨厌的方式来处理这个问题。 它可以工作,但是非常有限,效率低下,而且看起来或维护起来都很难看。 我已经看过在Damm Table中使用字符而不是Ints的选项,并且改变了get / set方法来处理这些,但是这是很多额外的工作,可能会引入其他问题。 任何build议的替代方法来处理这个,或将字符转换为Ints的方法将不胜感激。

谢谢!

不需要使用字符,但可以大大简化使用input数字的十进制数字创build数组的代码。

 var checkSumArray = [Int]() var tmp = number while tmp > 0 { checkSumArray.append(tmp % 10) tmp /= 10 } checkSumArray = checkSumArray.reverse() 
 if let myInt = String(Character("1")).toInt() { println(myInt) } 

您还可以创build一个字符扩展如下:

 extension Character { var integerValue:Int { return String(self).toInt() ?? 0 } } 

testing

 Character("1").integerValue // 1 Character("2").integerValue // 2 Character("3").integerValue // 3 Character("4").integerValue // 4 Character("5").integerValue // 5 Character("6").integerValue // 6 Character("7").integerValue // 7 Character("8").integerValue // 8 Character("9").integerValue // 9 Character("0").integerValue // 0 Character("a").integerValue // 0 Array("9876").first!.integerValue // 9 Array("9876")[1].integerValue // 8 Array("9876")[2].integerValue // 7 Array("9876").last!.integerValue // 6 

基于如何在Swift中将*数字转换为数字数组 ,您可以这样做(数字必须是正数):

 let checkSumArray = map(number.description) { String($0).toInt()! }