web-dev-qa-db-fra.com

L'opérateur binaire + ne peut pas être appliqué à deux opérandes int

Salut, j'ai une question sur ce code:

1)

let label = "The width is "
let width = 94
let widthLabel = label + String(width)

2)

let height = "3"
let number = 4
let hieghtNumber = number + Int(height)

La première partie fonctionne très bien, mais je ne comprends pas pourquoi la seconde ne fonctionne pas. J'obtiens l'erreur "L'opérateur binaire" + "ne peut pas être appliqué à deux opérandes int", ce qui pour moi n'a pas beaucoup de sens. Quelqu'un peut-il m'aider avec une explication?

18
Neli Chakarova

1) Le premier code fonctionne parce que String a une méthode init qui prend un Int. Puis sur la ligne

let widthLabel = label + String(width)

Vous enchaînez les cordes, avec le +, pour créer widthLabel.

2) Swift peuvent être assez trompeurs, le problème réel est que Int n'a pas de méthode init qui prend a String. Dans cette situation, vous pouvez utiliser la méthode toInt sur String. Voici un exemple:

if let h = height.toInt() {
    let heightNumber = number + h
}

Vous devez utiliser et if let pour vérifier que String peut être converti en Int puisque toInt renverra nil en cas d'échec; forcer le déballage dans cette situation fera planter votre application. Voir l'exemple suivant de ce qui se passerait si height n'était pas convertible en Int:

let height = "not a number"

if let h = height.toInt() {
    println(number + h)
} else {
    println("Height wasn't a number")
}

// Prints: Height wasn't a number

Mise à jour Swift 2.0:

Int a maintenant un initialiseur qui prend un String, faisant l'exemple 2 (voir ci-dessus):

if let h = Int(height) {
    let heightNumber = number + h
}
16
ABakerSmith

Vous avez besoin de ceci:

let height = "3"
let number = 4
let heightNumber = number + height.toInt()!

Si vous voulez obtenir un Int d'un String vous utilisez toInt().

0
Vasil Garov