添加Ints和Double总是需要转换?

时间:2015-05-06 14:11:45

标签: swift

如果我要做这样的事情:

var total = 0.05 * 6 + 9

我是否需要始终为此工作?

var total = 0.05 * Double(6) + Double(9)

2 个答案:

答案 0 :(得分:3)

69这样的数字文字没有固定类型,它们会自动适应。因此,在0.05 * 6 + 9中,69已经是Double类型。如果你写了

let six = 6
let nine = 9
var total = 0.05 * six + nine

这不起作用,因为6本身的类型为Int

答案 1 :(得分:1)

要扩展gnasher729的答案,如果您发现自己必须(比方说)经常添加DoubleInt

e.g。

let six: Int = 6
let nine: Double = 9
var totalError = six + nine // Error!

您可以添加一个功能来保存输入

func +(lhs: Int, rhs: Double) -> Double
{
    return Double(lhs) + rhs
}

var total = six + nine // OK!

我认为我不建议在一般情况下这样做,因为原始限制的重点是让你把转换视为潜在错误的来源。我认为完全合法的一个案例是移位运营商

var foo: Int = 5
var bar: UInt64 = 20

var baz = bar << foo // Error!

在上面的例子中,foo需要被强制转换为UInt64 IMO,两个移位运算符的右侧应始终为Int