Ios 不一致的快速行为

Ios 不一致的快速行为,ios,swift,Ios,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 =

我不熟悉斯威夫特

我有以下代码

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 */
} 

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

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

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 = 1 + 1.0
编译是因为
Int
Double
(以及其他一些类型) 符合
IntegerLiteralConvertible
协议, 因此,literal
1
可以同时是
Int
literal 和一个
Double
literal。在这里,编译器选择
1
作为
Double
,因为这是唯一的选择
+
运算符存在。

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

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 = 1 + 1.0
编译是因为
Int
Double
(以及其他一些类型) 符合
IntegerLiteralConvertible
协议, 因此,literal
1
可以同时是
Int
literal 和一个
Double
literal。在这里,编译器选择
1
作为
Double
,因为这是唯一的选择
+
运算符存在。

虽然不完美(可能需要为Swift 2稍微编辑),但github用户seivan制作了一个库,它扩展了运算符以跨数字类型工作:虽然不完美(可能需要为Swift 2稍微编辑),github用户seivan创建了一个库,它扩展了运算符以跨数字类型工作: