valueof entero convertir cast ios xcode swift int character

ios - entero - convertir la entrada del usuario a la matriz de Ints en swift



string valueof swift (3)

Intento hacer un juego simple de iOS para aprender a programar rápidamente. El usuario ingresa un número de 4 dígitos en un campo de texto (teclado numérico de tipo de teclado, si eso es importante) y mi programa debe tomar ese número de 4 dígitos y poner cada dígito en una matriz. básicamente quiero algo como

userInput = "1234"

convertirse

inputArray = [1,2,3,4]

Sé que convertir una cadena en una matriz de caracteres es muy fácil y rápido

var text : String = "BarFoo" var arrayText = Array(text) //returns ["B","a","r","F","o","o"]

mi problema es que necesito que mi matriz se llene con números enteros, no con caracteres. Si convierto la entrada del usuario a un Int, se convierte en un número único, de modo que si el usuario ingresa "1234", la matriz se rellena con [1234] y no [1,2,3,4]

Así que traté de tratar la entrada del usuario como una cadena, hacer una matriz de sus caracteres y, luego recorrer los elementos de esa matriz, convertirlos a Ints y ponerlos en una segunda matriz, como:

var input : String = textField.text var inputArray = Array(input) var intsArray = [Int]() for var i = 0; i < inputArray.count ; i++ { intsArray[i] = inputArray[i].toInt() }

pero no compila y me da el error: ''Character'' does not have a member named ''toint''

¿Qué estoy haciendo mal?


Podrías usar:

let text : String = "123a" let digits = Array(text).map { String($0).toInt()! } // Crash if any character is not int

Pero se bloqueará si la entrada no es válida.

Puede validar comprobando el resultado de toInt() :

let text : String = "1234" var digits = Array(text).reduce([Int](), combine: { (var digits, optionalDigit) -> [Int] in if let digit = String(optionalDigit).toInt() { digits.append(digit) } return digits }) if countElements(text) == digits.count { // all digits valid } else { // has invalid digits }


Convertir cadena en extensión [Int] - Versión Swift

Pongo extensiones debajo que te permiten convertir String en [Int] . Es una versión larga, donde puedes ver lo que sucede en cada línea con tu cadena.

extension String { func convertToIntArray() -> [Int]? { var ints = [Int]() for char in self.characters { if let charInt = char.convertToInt() { ints.append(charInt) } else { return nil } } return ints } } extension Character { func convertToInt() -> Int? { return Int(String(self)) ?? nil } }


Aquí hay una solución mucho más simple para usuarios futuros

let text : String = "12345" var digits = [Int]() for element in text.characters { digits.append(Int(String(element))!) }