web-dev-qa-db-fra.com

Concaténer un numéro avec une chaîne en Swift

Je dois concaténer un String et Int comme ci-dessous:

let myVariable: Int = 8
return "first " + myVariable

Mais il ne compile pas, avec l'erreur:

L'opérateur binaire '+' ne peut pas être appliqué aux opérandes de type 'String' et 'Int'

Quelle est la bonne façon de concaténer un String + Int?

42
Begum

Si vous voulez mettre un nombre dans une chaîne, vous pouvez simplement utiliser String Interpolation :

return "first \(myVariable)"
66
jtbandes

Vous avez DEUX options;

return "first " + String(myVariable)

ou

return "first \(myVariable)"
45
H. Mahida

Pour ajouter un Int à une chaîne, vous pouvez faire:

return "first \(myVariable)"
4
CW0007007

Si vous en faites beaucoup, pensez à un opérateur pour le rendre plus lisible:

func concat<T1, T2>(a: T1, b: T2) -> String {
    return "\(a)" + "\(b)"
}

let c = concat("Horse ", "cart") // "Horse cart"
let d = concat("Horse ", 17) // "Horse 17"
let e = concat(19.2345, " horses") // "19.2345 horses"
let f = concat([1, 2, 4], " horses") // "[1, 2, 4] horses"

operator infix +++ {}
@infix func +++ <T1, T2>(a: T1, b: T2) -> String {
    return concat(a, b)
}

let c1 = "Horse " +++ "cart"
let d1 = "Horse " +++ 17
let e1 = 19.2345 +++ " horses"
let f1 = [1, 2, 4] +++ " horses"

Vous pouvez bien sûr utiliser n'importe quel opérateur infixe valide, pas seulement +++.

4
Grimxn

Optional le mot-clé apparaîtra lorsque vous aurez marqué la variable comme facultative avec ! lors de la déclaration.

Pour éviter le mot-clé facultatif dans la sortie d'impression, vous avez deux options:

  1. Marquez la variable facultative comme non facultative. Pour cela, vous devrez donner une valeur par défaut.
  2. Utilisez le symbole de défilement forcé (!), À côté de la variable

Dans votre cas, cela fonctionnerait très bien

return "first \(myVariable!)"

3
Sategroup

Voici la documentation sur chaîne et caractères

var variableString = "Horse"
variableString += " and carriage"
// variableString is now "Horse and carriage"
0
Tomasz Szulc