今日はSwiftプログラミングの最初の日で、今まではObjective Cを使用しています。それが機能する簡単な追加プログラムを書いてみました。
_var i = 10
var j = 10
var k = i + j
println(k)
_
しかし、値の1つを浮動小数点数に変更すると、エラーが発生します。
_var i = 10
var j = 10.4
var k = i + j
println(k)
_
エラー:main.Swift:13:11:指定された引数を受け入れる '+'のオーバーロードが見つかりませんでした
今、私はグーグル検索をして、いくつかのことを試しました。 Double(i+j)
ですが、機能しません。 Swiftこの場合、暗黙的にintをfloatに変換する必要がありますね。
Swift言語を理解して誤解している場合は提案してください。
結果をどのようにしたいかに応じて、その型のinitメソッドを使用して適切な型に変換する必要があります。
例えば。
var myInt = 5;
var myDouble = 3.4;
たとえば、結果にdoubleが必要な場合
var doubleResult = Double(myInt) + myDouble;
代わりに整数が必要な場合は、doubleが切り捨てられることに注意してください。
var intResult = myInt + Int(myDouble)
あなたの例で私が見る問題は、追加操作を実行してから変換しようとしているが、追加を実行する前に両方の値が同じである必要があることです。
Appleは、型の不一致と変換エラーを回避するために、それを静かに厳しくしています。時々これは他の言語の開発者にとっては「厳しすぎる」かもしれませんが、私は最初はイライラしましたが慣れました。
独自の演算子を定義できます...
// 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
...しかし、これは言語の精神に反していると思います(そして@TheLazyChapが言うように、それはあなたが望むものに依存しますが、常に同じであるとは限りません)。
これを試して:
var i = 10 //Int Type
var j = 10.4 //Double Type
var k = Double(i) + j //result is now Double Type
println(k)