Swift convertir caracteres en cadena

Tengo un problema con la conversión de tipo de carácter a tipo de cadena. En primer lugar, tengo debajo de la extensión de String para encontrar el nth carácter dentro de String.

extension String { func characterAtIndex(index: Int) -> Character? { var cur = 0 for char in self { if cur == index { return char } cur++ } return nil } } 

Obtengo lo que quiero con esta extensión de class. Sin embargo, cuando uso ese carácter nth para el título de mi UIB personalizado, da un error. Mi class de Uibutton es

 class hareketliHarfler: UIButton { init(frame: CGRect) { super.init(frame: frame) // Initialization code } func getLetter(letter:String!){ self.titleLabel.text = letter } } 

El error se muestra cuando bash acceder a la function "getLetter (letter: String)". Aquí hay un ejemplo de la vista principal Códigos de controller:

  var harfim = hareketliHarfler(frame: CGRectMake(100,100,100,100)) var str="This is my String" var bufi=str.characterAtIndex(3) harfim.getLetter(bufi as AnyObject) **** 

En * la sección bash .getLetter (bufi), .getLetter (bufi como String) también bash cambiar el tipo de function de parámetro. Mira como: func getLetter (letra: Character!) O func getLetter (letra: AnyObject!) … etc No encontraste una forma. Necesitas ayuda en eso. Gracias

Su problema es bastante simple: su function characterAtIndex devuelve un carácter y self.titleLabel.text es una cadena. No puede convertir entre los dos implícitamente. La forma más fácil sería convertir el carácter en una cadena usando el inicializador de cadena:

 // ch will be Character? type. if let ch = str.characterAtIndex(3) { // Initialise a new String containing the single character 'ch' harfim.getLetter(String(ch)) } else { // str didn't have a third character. } 

A diferencia de otras soluciones, esto es seguro para caracteres Unicode inusuales, y no inicializará una matriz potencialmente grande o repetirá todo el String solo para get el tercer carácter.

Cambia esto:

 var bufi=str.characterAtIndex(3) harfim.getLetter(bufi as AnyObject) 

a esto:

 harfim.getLetter(String(Array(str)[3])) 

Entonces, qué sucede aquí:

  1. Creamos una matriz de nuestra cadena. Los elementos de matriz son símbolos de la secuencia original. Dicho desglose correctamente sigue símbolos que se presentan con una secuencia de dos o más puntos de código. Ej. Emoji o bandera como lo señala @MartinR.

  2. Accedemos al elemento en la position 4 °.

Tenga en count que a medida que creamos una matriz de la cadena inicial, entonces el performance es mejor usar este método solo con cadenas cortas y evitarlo en rutinas repetidas a menudo. Pero en tu caso, parece estar bien.