web-dev-qa-db-fra.com

Comment convertir un personnage Swift en chaîne?

Je souhaite renvoyer la première lettre d'une String sous la forme String au lieu de Character:

func firstLetter() -> String {
    return self.title[0]
}

Cependant, avec ce qui précède, je reçois Character is not convertible to String. Quelle est la bonne façon de convertir un personnage en chaîne?

Cette réponse suggère de créer une extension en indice, mais la déclaration de String a déjà une méthode en indice:

subscript (i: String.Index) -> Character { get }

Cette réponse est-elle dépassée ou ces deux choses sont-elles différentes?

22
Snowman

Pourquoi n'utilisez-vous pas l'interpolation de chaînes pour convertir le personnage en chaîne?

return "\(firstChar)"
25
Sascha L.

Juste le premier personnage? Que diriez-vous:

var str = "This is a test"
var result = str[str.startIndex..<str.startIndex.successor()] // "T": String

Retourne une chaîne (comme on pouvait s'y attendre avec un indice de plage d'une chaîne) et fonctionne tant qu'il y a au moins un caractère.

Ceci est un peu plus court, et probablement peut-être un peu plus rapide, mais à mon avis, je ne lis pas aussi clairement:

var result = str[str.startIndex...str.startIndex]
9
Matt Gibson

A partir de Swift 2.3/3.0 + vous pouvez faire quelque chose comme ceci:

func firstLetter() -> String {
    guard let firstChar = self.title.characters.first else {
        return ""  // If title is nil return empty string
    }
    return String(firstChar)
}

Ou si vous êtes d'accord avec la chaîne facultative:

func firstLetter() -> String? {
    guard let firstChar = self.title.characters.first else {
       return nil
    }
    return String(firstChar)
}

Mise à jour pour Swift 4 , pense également qu'une extension est meilleure

extension String{
func firstLetter() -> String {
    guard let firstChar = self.first else {
        return ""
    }
    return String(firstChar)
}
4
nCod3d

J'ai fait quelques recherches pour le même type de question, et j'ai trouvé cette méthode pour obtenir n'importe quel caractère d'une chaîne:

func charAsString(str:String, index:Int) -> String {
    return String(Array(str)[index])
}

et pour le premier caractère que vous appelez

var firstCharAsString = firstLetter("yourString",0)

Je ne suis pas encore très bon en programmation mais je pense que cela fera ce que vous voulez

MODIFIER:

Simplifié pour votre besoin:

func firstChar(str:String) -> String {
    return String(Array(str)[0])
}

J'espère que c'est ce dont tu as besoin

3
P1kachu

J'essayais d'obtenir des caractères uniques d'une chaîne analysée dans une chaîne . Je voulais donc B helpEnswer au format String, pas au format CHARACTER, pour pouvoir imprimer les caractères individuels dans une zone de texte . Je ne sais pas sur l'efficacité de celui-ci . Mais cela fonctionne. Swift 3.0
Merci pour l'aide de tous .....

var helpAnswer = "ABC"
var String1 = ""
var String2 = ""
var String3 = ""


 String1 = (String(helpAnswer[helpAnswer.index(helpAnswer.startIndex, offsetBy: 0)]))
 String2 = (String(helpAnswer[helpAnswer.index(helpAnswer.startIndex, offsetBy: 1)]))
 String3 = (String(helpAnswer[helpAnswer.index(helpAnswer.startIndex, offsetBy: 1)])
0
ChopinBrain
let str = "My String"
let firstChar = String(str.characters.first!)
0
Warif Akhand Rishi