如何在Swift中进行int和float之间的算术运算?

Pra*_*ari 16 compiler-errors swift xcode6

这是我在Swift编程中的第一天,到现在为止我们正在使用Objective C.我试着编写简单的附加程序.喜欢,

var i = 10
var j = 10
var k = i + j
println(k)
Run Code Online (Sandbox Code Playgroud)

但是当我将其中一个值更改为float时,它会给出错误.

var i = 10
var j = 10.4
var k = i + j
println(k)
Run Code Online (Sandbox Code Playgroud)

错误:main.swift:13:11:无法找到接受提供的参数的'+'的重载

现在我做谷歌搜索,并尝试了一些事情Double(i+j),但它不起作用.在这种情况下,Swift应该隐式地将int转换为float,不是吗?

请告知我是否在理解Swift语言时遇到任何错误.

The*_*hap 28

根据您想要的结果,您应该使用该类型的init方法将其转换为适当的类型.

例如.

var myInt = 5;
var myDouble = 3.4;
Run Code Online (Sandbox Code Playgroud)

如果我想在我的结果中使用双精度数

var doubleResult = Double(myInt) + myDouble;
Run Code Online (Sandbox Code Playgroud)

如果我想要一个整数,请注意双重将被截断.

var intResult = myInt + Int(myDouble)
Run Code Online (Sandbox Code Playgroud)

我在您的示例中看到的问题是您尝试执行添加操作然后转换它,但在执行添加之前两个值都必须相同.

Apple已经严格要求避免类型不匹配和转换错误.有时这对于来自其他语言的开发来说可能有点'过于严格',起初我很生气,但我已经习惯了.


Gri*_*mxn 7

你可以定义自己的运算符......

// 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
Run Code Online (Sandbox Code Playgroud)

......但我觉得这违背了语言的精神(正如@TheLazyChap所说,这取决于你想要什么,这可能并不总是相同的).