gpt4 book ai didi

swift - 为什么相同的代码会在一个位置而不是另一个位置抛出错误?

转载 作者:行者123 更新时间:2023-11-28 09:53:46 24 4
gpt4 key购买 nike

我目前正在着手一个项目,我的第一个任务是分解其他人从 AppDelegate 创建的 God Object。我首先复制了与管理位置相关的代码,目的是将对该代码的调用委托(delegate)给新对象。

然而,我有两个陈述让我抓狂。

新文件:

if locationManager?.location?.horizontalAccuracy > horizontalAccuracyCheck{...}

旧文件:

if locationManager?.location?.horizontalAccuracy > horizontalAccuracyCheck{...}

您会注意到代码是相同的。在这两种情况下,self.locationManager?定义为:

var locationManager: CLLocationManager?

但在新文件中,我收到一条关于“可选类型的值未展开”的警告——为什么?完全重复的代码,复制和粘贴,有什么不同?

更改代码以解包它可以解决问题:

if (locationManager?.location?.horizontalAccuracy)! > horizontalAccuracyCheck{...}

我可以理解为什么我需要显式解包一个潜在的可选返回值。但是……为什么只在一个地方?

最佳答案

原因是我们在这里谈论的是两种截然不同的语言。一个文件是 Swift 2,另一个文件是 Swift 3。

在 Swift 2 中,您可以使用大于或小于运算符将代表一个数字的 Optional 与另一个数字进行比较。在 Swift 3 中,您不能这样做。

这是同一件事的一个更简单的例子:

    let optint : Int? = 7
let ok = optint < 42

该代码在 Swift 2 中是合法的,但在 Swift 3 中是非法的。

关于swift - 为什么相同的代码会在一个位置而不是另一个位置抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41475172/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com