【发布时间】:2017-01-04 23:52:45
【问题描述】:
我目前正在启动一个项目,我的第一个任务是分解其他人从 AppDelegate 创建的上帝对象。我首先复制了与管理位置相关的代码,目的是将对该代码的调用委托给新对象。
然而,我有两句话让我抓狂。
新文件:
if locationManager?.location?.horizontalAccuracy > horizontalAccuracyCheck{...}
旧文件:
if locationManager?.location?.horizontalAccuracy > horizontalAccuracyCheck{...}
您会注意到代码是相同的。在这两种情况下 self.locationManager?定义为:
var locationManager: CLLocationManager?
但是在新文件中,我收到一条关于“未包装的可选类型的值”的警告——为什么?完全重复的代码,复制和粘贴,有什么不同?
更改代码以解包可以解决问题:
if (locationManager?.location?.horizontalAccuracy)! > horizontalAccuracyCheck{...}
我可以理解为什么我需要显式地打开一个潜在的可选返回。但是……为什么只在一个地方?
【问题讨论】:
-
我的猜测是迁移器inserted a
>overload 用于旧文件中的可选比较,但新文件中没有(我不相信你可以将 Swift 2 和 Swift 3 混合在同一个目标中)。 -
@Hamish 你应该给出这个答案。如果它是正确的,这是一个绝妙的猜测,显然应该成为公认的答案。
-
哦。 @Hamish 几乎可以肯定是正确的——旧文件中存在重载。它在我的待办事项清单上,以便在某个时候将其删除。