Convertir carácter en una matriz a un integer

No puedo entender cómo hacer esto a pesar de que he buscado en la documentation.

Estoy tratando de averiguar cómo convertir un carácter en un índice en una matriz a un integer.

Por ejemplo, digamos que tengo una matriz de caracteres llamada "contenedor", no puedo entender cómo hacerlo:

var number:Integer = container[3] 

¡Gracias por la ayuda!

Swift no facilita la conversión entre representaciones primitivas y mecanografiadas de cosas. Aquí hay una extensión que debería ayudar mientras tanto:

 extension Character { func utf8Value() -> UInt8 { for s in String(self).utf8 { return s } return 0 } func utf16Value() -> UInt16 { for s in String(self).utf16 { return s } return 0 } func unicodeValue() -> UInt32 { for s in String(self).unicodeScalars { return s.value } return 0 } } 

Esto te permite acercarte bastante a lo que quieres:

 let container : Array<Character> = [ "a", "b", "c", "d" ] /// can't call anything here, subscripting's also broken let number = container[2] number.unicodeValue() /// Prints "100" 

Para cualquier ingeniero que encuentre esta pregunta, vea rdar: // 17494834

No estoy seguro de que sea efectivo o no, pero al less funcionó. Convertí carácter a String y luego a Int.

 String(yourCharacterInArray).toInt() 

Puedes probar esto:

 var container = "$0123456789" var number:Int = Array(container.utf8).map { Int($0) }[3] 

Es totalmente feo, pero hace el trabajo. También es un poco computacional caro (O (n) cada vez que se accede a un personaje en una cadena). Sin embargo, esto puede ser un truco para recuperar una forma de build los CStrings:

 typealias CString = Array<CChar> func toCString(string: String) -> CString { return Array(string.utf8).map { CChar($0) } + [0] } var cString = toCString("$ 0123456789") println("The 2nd character in cString has value \(cString[1])") // It outputs 32 

o sin implementar una function:

 var container = "$ 0123456789" var containerAsCString = Array(container.utf8).map { CChar($0) } + [0] println("The 2nd character in container has value \(containerAsCString[1])") // It outputs 32 

¿Por qué no convertir el carácter a String, get los UnicodeScalars y extraer el .value en el escalar?

algo como:

 var chr: [Character] = ["C", "B", "A"] for a in String(chr[1]).unicodeScalars { println(a.value)} 

Para mí trabajé algo así:

 "\(container[3])".toInt()