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?
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
}
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()
.