swift - Swift 数组类型与运算符赋值有何不同?

标签 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?

最佳答案

使用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] 进行比较——后者是合法的。

关于swift - Swift 数组类型与运算符赋值有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41750051/

相关文章:

ios - 使用 AudioKit 的 AKHighPassFilter 过滤频率

协议(protocol)中的 Swift 函数未调用

ios - 闭包中的 Swift UITableView reloadData

ios - FBSDKGraphRequest 如何获取个人资料封面照片?

ios 如何在推送通知中启动应用程序

ios - 在 UIView 中从 UIViewController 快速调用组件

ios - 更改assetVideoTrack的preferredTransform以解决合并视频时的镜像问题

swift - iOS 15 中的文档浏览器应用不断创建 iCloud 驱动器文件夹

swift : buffer a very long argument to `Process` with pipe

ios - 在生产应用程序中使用 ProcessInfo.processInfo.environment 有多危险?