Преобразование символов в Int в Swift

Я работаю над проектом, который включает проверку контрольной суммы ввода Int с Damm Algorithm. Мне удалось создать рабочую таблицу, и мой метод для доступа к значению в таблице включает в себя передачу промежуточного значения и цифры для передачи в качестве значения столбца. напр.

     self.tableToUse[interim,checkSumArray[i]]

К сожалению, я столкнулся с проблемой, когда пытаюсь передать цифры с моего ввода в метод 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, которую я создал и изменил метод get/set, чтобы справиться с ними вместо этого, но это много дополнительной работы и может привести к другим проблемам. Любые предложения об альтернативных способах обработки этого или способ преобразования символов в инты будут оценены.

Спасибо!

Ответ 1

Нет необходимости работать с символами, но ваш код для создания массив с десятичными цифрами входного номера может быть значительно упрощается:

var checkSumArray = [Int]()
var tmp = number
while tmp > 0 {
    checkSumArray.append(tmp % 10)
    tmp /= 10
}
checkSumArray = checkSumArray.reverse()  

Ответ 2

if let myInt = String(Character("1")).toInt() {
    println(myInt)
}

Вы также можете создать расширение символа следующим образом:

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

Тестирование

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