Как сделать арифметику между int и float в Swift?

Это мой первый день в программировании Swift, и до сих пор мы используем Objective C. Я попытался написать программу простого добавления, в которой он работает. Как,

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

Но когда я меняю одно из значений на float, он дает ошибку.

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

Ошибка: main.swift: 13: 11: Не удалось найти перегрузку для '+', которая принимает предоставленные аргументы

Теперь я выполнил поиск Google и попробовал несколько вещей, например. Double(i+j), но это не сработает. Swift должен неявно преобразовывать int в float в этом случае, не так ли?

Пожалуйста, предложите, если я ошибаюсь, понимая язык Swift.

Ответ 1

В зависимости от того, каким должен быть ваш результат, вы должны преобразовать его в соответствующий тип, используя метод init.

например.

var myInt = 5;
var myDouble = 3.4;

Если я хочу удвоить, например, в моем результате

var doubleResult = Double(myInt) + myDouble;

если я хочу вместо этого целое число, обратите внимание, что double будет усечен.

var intResult = myInt + Int(myDouble)

Проблема, которую я вижу в вашем примере, заключается в том, что вы пытаетесь выполнить операцию добавления и затем преобразовать ее, но перед выполнением добавления оба значения должны быть одинаковыми.

Apple сделала все возможное, чтобы избежать неправильных совпадений и ошибок преобразования. Иногда это может быть немного "слишком строгим" для разработчиков, поступающих с других языков, сначала я был раздражен, но я привык к этому.

Ответ 2

Вы можете определить свой собственный оператор...

// 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, это зависит от того, что вы хотите, что не всегда может быть одинаковым).

Ответ 3

попробуйте следующее:

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