webentwicklung-frage-antwort-db.com.de

Wie kann man in Swift zwischen int und float rechnen?

Dies ist mein erster Tag in der Swift-Programmierung und bis jetzt verwenden wir Objective C. Ich habe versucht, ein einfaches Additionsprogramm zu schreiben, das funktioniert. Mögen,

var i = 10
var j = 10
var k = i + j
println(k)

Aber wenn ich einen der Werte ändere, um zu schweben, gibt es Fehler.

var i = 10
var j = 10.4
var k = i + j
println(k)

Fehler: main.Swift: 13: 11: Es konnte keine Überladung für '+' gefunden werden, die die angegebenen Argumente akzeptiert

Jetzt habe ich eine Google-Suche durchgeführt und ein paar Dinge ausprobiert, z. Double(i+j), aber es funktioniert nicht. Swift sollte in diesem Fall implizit int in float konvertieren, nicht wahr?

Bitte schlagen Sie vor, wenn ich Fehler beim Verstehen der Swift-Sprache habe.

13
Pranit Kothari

Abhängig davon, wie das Ergebnis aussehen soll, sollten Sie es mit dieser init-Methode in den entsprechenden Typ konvertieren.

z.B.

var myInt = 5;
var myDouble = 3.4;

Wenn ich zum Beispiel ein Doppel in meinem Ergebnis haben möchte

var doubleResult = Double(myInt) + myDouble;

wenn ich stattdessen eine ganze Zahl haben möchte, beachten Sie bitte, dass das Double abgeschnitten wird.

var intResult = myInt + Int(myDouble)

Das Problem, das ich in Ihrem Beispiel sehe, ist, dass Sie versuchen, eine Add-Operation auszuführen und diese dann zu konvertieren. Beide Werte müssen jedoch gleich sein, bevor Sie die Addition durchführen.

Apple hat es streng gemacht, um Tippfehler und Konvertierungsfehler zu vermeiden. Manchmal kann das für Entwickler, die aus anderen Sprachen kommen, etwas zu streng sein. Ich war zuerst verärgert, aber ich habe mich daran gewöhnt.

24
TheLazyChap

Sie könnten Ihren eigenen Operator definieren ...

// Put this at file level anywhere in your project
operator infix + { }
@infix func + (a: Int, b: Double) -> Double {
    return Double(a) + b
}
@infix func + (a: Double, b: Int) -> Double {
    return Double(b) + a
}

let i = 10
let j = 10.4
let k = i + j // 20.4

... aber ich habe das Gefühl, dass dies gegen den Geist der Sprache verstößt (und wie @TheLazyChap sagt, es kommt darauf an, was Sie wollen, was nicht immer gleich ist).

5
Grimxn

versuche dies:

 var i = 10  //Int Type
 var j = 10.4  //Double Type
 var k = Double(i) + j //result is now Double Type
 println(k)
0
MarcS