出于好奇心,快速地说:
var a:Double = 3.5
var b:Int = 4
var c = a * Double(b)
var d:Double = a * b
为什么d
无效,但c
是?由于我指定d
是双精度型,编译器是否应该检测到b
应该被转换为double?
答案 0 :(得分:3)
在Swift中,您必须明确转换类型,而不是强制转换类型。 See the document
由于每种数字类型都可以存储不同的值范围,因此您必须根据具体情况选择加入数字类型转换。这种选择加入方法可以防止隐藏的转换错误,并有助于在代码中明确显示类型转换意图。
如果您有b:Int
,可以Double(b)
,因为它从Int
转换为Double
,但您不能b as Double
或{ {1}}因为它正在投射。
至于c: Double = b
,问题是没有var d:Double = a * b
运算符实现接受*
和Double
作为操作数并返回Int
。
如果需要,可以实现重载运算符:
Double
但我不建议这样做。您应该执行明确的转换。
答案 1 :(得分:0)
除非在非常精确的情况下,否则Swift不会进行自动类型转换,因此,在混合算术类型时,您必须明确处理转换。