1) Der erste Code funktioniert, weil String
eine Init-Methode hat, die eine Int
dauert. Dann auf der Linie
let widthLabel = label + String(width)
Sie verketten die Saiten mit dem +
Operator, widthLabel
zu erstellen.
2) Swift Fehlermeldungen ziemlich irreführend sein kann, ist das eigentliche Problem Int
keine init
Methode hat, die eine String
nimmt. In diesem Fall können Sie die toInt
-Methode unter String
verwenden. Hier ein Beispiel:
if let h = height.toInt() {
let heightNumber = number + h
}
sollten Sie verwenden und if let
Anweisung der String
zu überprüfen, um eine Int
umgewandelt werden, da toInt
wird nil
zurück, wenn es fehlschlägt; Auspacken der Kraft in dieser Situation wird Ihre App zum Absturz bringen. Siehe das folgende Beispiel von dem, was, wenn height
passieren würde, war nicht konvertierbar zu einem 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
Swift 2.0 Update:
Int
hat jetzt eine initialiser, die eine String
nimmt, so dass beispielsweise 2 (siehe oben):
if let h = Int(height) {
let heightNumber = number + h
}
Siehe auch die Antwort auf [diese Frage] (http: //stackoverflow.com/questions/40557214/swift-operator-throwing-error-on-two-ints). Wenn A bereits als Double von CGFloat oder was auch immer deklariert ist und B und C Ganzzahlen sind, wird A = B + C im Wesentlichen mit dieser Fehlermeldung fehlschlagen, was das eigentliche Problem und die Lösung verdeckt: A = Double (B + C) . Diese Frage/Antwort steht ganz oben in der Google-Suche nach diesem Fehler. In einigen Fällen kann die Antwort der anderen Frage hilfreicher sein. – ConfusionTowers