2014-06-19 8 views
10

Dies ist mein erster Tag in der Swift-Programmierung und bis jetzt verwenden wir Objective C. Ich habe versucht, ein einfaches Zusatzprogramm zu schreiben, das funktioniert. Wie,Wie arithmetische zwischen Int und Float in Swift?

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

Aber wenn ich einen der Werte in float ändern gibt es einen Fehler.

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

Error: main.swift:13:11: Could not find an overload for '+' that accepts the supplied arguments

Jetzt habe ich Google-Suche und versucht, einige Sache z.B. Double(i+j), aber es funktioniert nicht. Swift sollte in diesem Fall implizit int in float umwandeln, oder?

Bitte schlagen Sie vor, wenn ich Fehler begreife, Swift Sprache zu verstehen.

Antwort

23

Je nachdem, was Ihr Ergebnis haben soll, sollten Sie es mit dieser Init-Methode in den entsprechenden Typ konvertieren.

zB.

var myInt = 5; 
var myDouble = 3.4; 

Wenn ich ein Doppel zum Beispiel in meinem Ergebnis wollen

var doubleResult = Double(myInt) + myDouble; 

wenn ich eine ganze Zahl stattdessen möchten, nutzen Sie bitte die Doppel beachten Sie werden abgeschnitten.

var intResult = myInt + Int(myDouble) 

Das Problem, das ich in Ihrem Beispiel zu sehen ist, Sie versuchen, eine Add Operation zu tun und es dann konvertieren, aber beide brauchen Werte gleich sein, bevor Sie die Additionen.

Apple hat es sehr strikt gemacht, um Fehler bei Typfehlern und Konvertierungen 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.

+1

Nur eine Anmerkung; Float (int) funktionierte nicht für mich. Double (int) war die Antwort. – Morkrom

+0

Swift zu begrenzt. Beispiel: 2 * 3.14 => 3.14 + 3.14 Ich hoffe in der Zukunft diese Arbeit ohne Konvertierung – john07

0

versuchen Sie dies:

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

Sie Ihre eigenen Operator definieren könnte ...

// 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 finde, dass das gegen den Geist der Sprache wird (und als @TheLazyChap sagt, es kommt darauf an, was du willst, was vielleicht nicht immer das gleiche ist).

+1

+1: Das war große Hilfe. –

+0

Nice hacky! Dies ist beeindruckend, aber untergräbt die strenge Eingabe von Swift –

+0

Ich habe es so im ursprünglichen Beitrag gesagt! – Grimxn