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
协议,
因此,literal1
可以同时是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
协议,
因此,literal1
可以同时是Int
literal
和一个Double
literal。在这里,编译器选择1
作为
Double
,因为这是唯一的选择
+
运算符存在。虽然不完美(可能需要为Swift 2稍微编辑),但github用户seivan制作了一个库,它扩展了运算符以跨数字类型工作:虽然不完美(可能需要为Swift 2稍微编辑),github用户seivan创建了一个库,它扩展了运算符以跨数字类型工作: