当我在swift中阅读关于类型推断时,我开始知道swift足够聪明,可以了解数据类型
就像我写这个程序一样
var v3 = 2+2.5
print("the result is \(v3)")
然后我看到输出
the result is 4.5
但是当我写这个程序时
var v1 = 2.5
var v2 = 2
var v3:Double = v1 + v2
print("the result is \(v3)")
然后它给了我这个错误
ERROR at line 7, col 20: binary operator '+' cannot be applied to operands of type 'Double' and 'Int'
var v3:Double = v1 + v2
~~ ^ ~~
NOTE at line 7, col 20: expected an argument list of type '(Double, Double)'
var v3:Double = v1 + v2
所以任何人都可以向我解释这里发生了什么
我在IBM沙箱上完成了这个程序
答案 0 :(得分:3)
撰写var v3 = 2+2.5
时,Swift必须推断出2
的类型,这是一个与Int
和Double
兼容的数字文字。编译器能够这样做,因为同一表达式中有2.5
,即Double
。因此,编译器得出结论:2
也必须是Double
。编译器计算总和,并将v3
设置为4.5
。在运行时不执行任何添加。
当您编写var v2 = 2
时,编译器会将2
视为Int
,同时也会v1
和Int
。现在var v3:Double = v1 + v2
上添加了一个,但由于v1
和v2
类型不匹配而失败。
如果您声明var v2:Double = 2
,则问题将得到解决。