快速行为不一致

时间:2015-12-18 06:14:55

标签: ios swift

我是Swift的新手。

我有以下代码

class ViewController: UIViewController {

let var1: Double = 0.0
let var2: Int = 0

override func viewDidLoad() {
    super.viewDidLoad()
    let someObject = TestViewController(x: 20, total: 30, taxPact: 40, subtotal: 50)
    var x = 1 + 1.0 /* COMPILER IS FINE WITH ADDING INT AND DOUBLE */
    print("sum is \(var1 + var2)") /* COMPILER COMPLAINS HERE BINARY OPERATOR + CANNOT BE APPLIED */
} 

为什么我们会看到这种不一致的行为?

1 个答案:

答案 0 :(得分:4)

错误消息与字符串插值无关,此

let var1: Double = 0.0
let var2: Int = 0
var x = var1 + var2 // error: binary operator '+' cannot be applied to operands of type 'Double' and 'Int'

也没有编译,原因是没有+Int添加到Double的运算符 Swift不会隐式转换类型。你必须明确转换, e.g。

var x = var1 + Double(var2)
print("sum is \(var1 + Double(var2))")

您的其他陈述

var x = 1 + 1.0

编译,因为IntDouble(以及更多类型) 符合IntegerLiteralConvertible协议, 所以文字 1可以是Int字面值 和Double字面值。这里编译器选择1为a Double因为这是唯一合适的选择 +运算符存在。

相关问题