2014-06-19 13 views
10

Questo è il mio primo giorno di programmazione Swift e fino ad ora stiamo usando l'obiettivo C. Ho provato a scrivere un semplice programma di aggiunta che funziona. Mi piace,Come eseguire l'aritmetica tra int e float in Swift?

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

Ma quando cambio uno dei valori su float dà errore.

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

Ora ho fatto di ricerca di Google e ha cercato qualche cosa per esempio Double(i+j), ma non funziona. Swift dovrebbe implicitamente convertire int in float in questo caso, non è vero?

Si prega di suggerire se sto facendo qualche errore comprensione del linguaggio Swift.

risposta

23

A seconda del risultato che si desidera ottenere, è necessario convertirlo nel tipo appropriato utilizzando il metodo init di quel tipo.

es.

var myInt = 5; 
var myDouble = 3.4; 

Se voglio una doppia per esempio nel mio risultato

var doubleResult = Double(myInt) + myDouble; 

se voglio un intero, invece, si prega di notare il doppio verrà troncato.

var intResult = myInt + Int(myDouble) 

Il problema che vedo nel tuo esempio è che si sta cercando di fare un'operazione di aggiunta e quindi convertirlo, ma entrambi i valori deve essere lo stesso prima di eseguire l'aggiunta.

Apple ha reso rigoroso il rigoroso per evitare errori di conversione e di corrispondenza errata. A volte questo può essere un po 'troppo severo per i dev che provengono da altre lingue, all'inizio ero irritato, ma mi ci sono abituato.

+1

Solo un appunto; Float (int) non funzionava per me. Double (int) era la risposta. – Morkrom

+0

rapido troppo limitato. esempio: 2 * 3.14 => 3.14 + 3.14 Spero che in futuro questo lavoro senza conversione – john07

0

provare questo:

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

Si potrebbe definire il proprio operatore di ...

// 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 

... ma sento che questo è andare contro lo spirito della lingua (e come @TheLazyChap Dice, dipende da cosa vuoi, che potrebbe non essere sempre lo stesso).

+1

+1: è stato di grande aiuto. –

+0

Nice hacky! Questo è impressionante ma mina la rigida tipizzazione di Swift –

+0

che ho detto nel post originale! – Grimxn