web-dev-qa-db-ja.com

Swiftでintとfloatの間の算術を行う方法は?

今日は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言語を理解して誤解している場合は提案してください。

16
Pranit Kothari

結果をどのようにしたいかに応じて、その型のinitメソッドを使用して適切な型に変換する必要があります。

例えば。

var myInt = 5;
var myDouble = 3.4;

たとえば、結果にdoubleが必要な場合

var doubleResult = Double(myInt) + myDouble;

代わりに整数が必要な場合は、doubleが切り捨てられることに注意してください。

var intResult = myInt + Int(myDouble)

あなたの例で私が見る問題は、追加操作を実行してから変換しようとしているが、追加を実行する前に両方の値が同じである必要があることです。

Appleは、型の不一致と変換エラーを回避するために、それを静かに厳しくしています。時々これは他の言語の開発者にとっては「厳しすぎる」かもしれませんが、私は最初はイライラしましたが慣れました。

28
TheLazyChap

独自の演算子を定義できます...

// 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が言うように、それはあなたが望むものに依存しますが、常に同じであるとは限りません)。

7
Grimxn

これを試して:

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