Extend the example in “The Swift Programming Language” (Swift 5.5) “Integer and Floating-Point Conversion”:
3 + 0.14 // allowed
let three = 3
let rest = 0.14
3 + rest // allowed
0.14 + three // compile error
three + 0.14 // compile error
I don’t understand why the last two lines are taken as compile error. Can anyone help to explain a bit? Thanks.
I don’t understand why the last two lines are taken as compile error. Can anyone help to explain a bit?
You may need to know two things.
-
In Swift, addition of
IntandDoubleis not allowed. (The binary operator+is not defined for (Int,Double) nor (Double,Int).) -
In Swift, the types of literals are defined depending on the context.
In your first example:
3 + 0.14 // allowed
3 is interpreted as Double (this may not be as you expect), 0.14 is interpreted as Double.
The integer literal 3 can be interpreted both as Int and as Double depending on the context.
In this declaration:
let three = 3
The type of three is inferred as Int, as there is not type hint in the declaration.
And the type of rest is inferred as Double.
In the following line, 3 is inferred as Double again in this context.
3 + rest // allowed
Thus, the last two lines causes error:
0.14 + three // compile error
three + 0.14 // compile error
Because type inference of three is finished here and it has the fixed type Int.