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已经严格要求避免类型不匹配和转换错误.有时这对于来自其他语言的开发来说可能有点'过于严格',起初我很生气,但我已经习惯了.
你可以定义自己的运算符......
// 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所说,这取决于你想要什么,这可能并不总是相同的).
| 归档时间: |
|
| 查看次数: |
25166 次 |
| 最近记录: |