【问题标题】:Change CLLocationDegrees into a Double/NSNumber to save in Core Data (Swift)将 CLLocationDegrees 更改为 Double/NSNumber 以保存在 Core Data (Swift) 中
【发布时间】:2015-07-24 13:42:12
【问题描述】:

在尝试将我所有的目标 C 代码更改为 Swift(这本身就是一个非常陡峭的学习曲线)时,我遇到了一个问题。

我只是想将 CLLocationDegrees 值保存到核心数据中。但我所做的一切都不起作用。

我开始:

self.myLocation?.locationCurrentLat = self.fixedLocation?.coordinate.latitude

但不知道如何让 CLLocationDegrees 向下转换(如果这是正确的)为 Double 或 NSNumber,而且我在 Google 上搜索的任何内容都无济于事!

我显然对很多事情仍然一头雾水。这肯定是其中之一。

我可能做错了什么......或需要做什么?

提前致谢

【问题讨论】:

标签: swift core-location


【解决方案1】:

CLLocationDegrees 双精度数。你应该不需要做任何事情。

如果您确实需要将其转换为双精度,请使用语法

Double(self.fixedLocation?.coordinate.latitude ?? 0)

但这不是必需的,因为 CLLocationDegrees 是 double 的类型别名。

要转换为 NSNumber,您可以使用

NSNumber(value: self.fixedLocation?.coordinate.latitude ?? 0)

编辑:

如果self.fixedLocation 为nil,我编辑了上面的代码以使用“nil 合并运算符”将值设为0。如果 fixedLocation 为 nil,则使其返回包含 nil 的可选 Int 会更安全:

let latitude: Double?
if let location = self.fixedLocation {
  latitude =     Double(location.coordinate.latitude)
} else {
  latitude = nil
}

【讨论】:

  • 非常感谢。结果我的选择也到处都是。我真的需要回去继续学习这些可选选项的含义,因为它让我左右摇摆。
  • 要记住的关键是,可选项实际上是不同于它的可选项的数据类型。它实际上是一个包含该事物的枚举。这就是“解包”的意思。打开可选项并取出存储在里面的对象。 (PS Upvotes 感谢您认为有帮助的答案)
  • CLLocationDegreeslatitude 的类型)是Double 的类型别名。初始化器是多余的。
  • 正如我所说,“CLLocationDegrees 双倍”。 Swift 是否甚至在标量类型之间进行强制转换,或者您是否总是使用将不同标量类型作为参数的初始化程序?
【解决方案2】:

下面是如何在 Objective-C 中转换为 NSNumber;

[NSNumber numberWithDouble:newLocation.coordinate.longitude]

【讨论】:

  • 我更喜欢 C/C++/Objective-C 的一件事是它可以处理不同的数字类型。它会将一个值“自动提升”为不同的数字类型。在 Swift 中你必须投射 EVERYTHING!
  • 是的先生,必须保持类型安全!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多