如何处理Swift数组类型与赋值给操作符不同?

时间:2017-01-19 19:24:35

标签: swift

在分配变量与二元运算符时,是否存在不同的类型推断策略?

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?

1 个答案:

答案 0 :(得分:3)

对于arrayOfInts,编译器默认情况下将整数文字推断为类型Int。因此arrayOfInts[Int]。对于arrayOfDoubles,编译器默认情况下会将浮点文字推断为类型Double。因此arrayOfDoubles属于[Double]类型。您无法将[Int][Double]进行比较(至少不能与标准库==的重载进行比较),因此您将收到编译错误。

但是,使用表达式[1, 2, 3] == [1.0, 2.0, 3.0] - Swift可以将两者的浮点和整数文字推断为类型Double,因为Double符合两者ExpressibleByIntegerLiteralExpressibleByFloatLiteral。因此,您需要将[Double][Double]进行比较 - 合法。