Как сделать арифметику между 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)