我是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 */
}
为什么我们会看到这种不一致的行为?
答案 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
编译,因为Int
和Double
(以及更多类型)
符合IntegerLiteralConvertible
协议,
所以文字 1
可以是Int
字面值
和Double
字面值。这里编译器选择1
为a
Double
因为这是唯一合适的选择
+
运算符存在。