这是我在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:无法找到' +'那 接受提供的参数
现在我进行了谷歌搜索并试了几件事,例如Double(i+j)
,但它不起作用。在这种情况下,Swift应该隐式地将int转换为float,不是吗?
请告知我是否在理解Swift语言时遇到任何错误。
答案 0 :(得分:24)
根据您想要的结果,您应该使用该类型的init方法将其转换为适当的类型。
例如
var myInt = 5;
var myDouble = 3.4;
如果我想在结果中使用双精度
var doubleResult = Double(myInt) + myDouble;
如果我想要一个整数,请注意双重将被截断。
var intResult = myInt + Int(myDouble)
我在您的示例中看到的问题是您尝试执行添加操作然后转换它,但在执行添加之前两个值都必须相同。
Apple严格控制,以避免类型不匹配和转换错误。有时候这可能有点“过于严格”。对于来自其他语言的开发人员,我一开始很生气,但我已经习惯了。
答案 1 :(得分:6)
您可以定义自己的运营商......
// 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所说,这取决于你想要什么,这可能并不总是相同的。)
答案 2 :(得分:0)
试试这个:
var i = 10 //Int Type
var j = 10.4 //Double Type
var k = Double(i) + j //result is now Double Type
println(k)