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))!)
}