分配变量与二元运算符时的类型推断是否有不同的策略?
let arrayOfInts = [1,2,3]
let arrayOfDoubles = [1.0, 2.0, 3.0]
// arrayOfInts == arrayOfDoubles
// Binary operator '==' cannot be applied to ... [Int] [Double]
[1,2,3] == [1.0, 2.0, 3.0] // works?
最佳答案
使用arrayOfInts
,编译器默认将整数文字推断为Int
类型。因此arrayOfInts
是一个[Int]
。使用arrayOfDoubles
,编译器默认将浮点文字推断为Double
类型。因此,arrayOfDoubles
的类型为[Double]
。您无法将 [Int]
与 [Double]
进行比较(至少不能与标准库的重载 ==
进行比较),因此您'将收到编译器错误。
但是,使用表达式 [1, 2, 3] == [1.0, 2.0, 3.0]
– Swift 可以将浮点和整数文字推断为属于 Double
类型,因为 Double
符合 ExpressibleByIntegerLiteral
和 ExpressibleByFloatLiteral
。因此,您将 [Double]
与 [Double]
进行比较——后者是合法的。
关于swift - Swift 数组类型与运算符赋值有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41750051/