一个易于使用的 CLLocation 包装器,用于编码和解码 CLLocation。
许多 iOS 应用程序都使用 Core Location 框架。Core Location 的主要对象是 CLLocation,它代表一个位置。出于某些奇怪的原因,Core Location 不符合 Codable 协议。因此,我们默认无法序列化它,将其保存到数据库,或通过网络 API 发送它。这个项目解决了这个问题。
在这个代码中,我为 CLLocation 创建了一个包装器,你可以使用它来序列化和反序列化 CLLocation。 尽情享用吧!
附注:查看测试,了解它是如何工作的以及如何使用 CLLocationWrapper。
假设你有一个位置
import CoreLocation
let location = CLLocation(coordinate: CLLocationCoordinate2D(latitude: 16.6, longitude: 12.5),
altitude: 2.6,
horizontalAccuracy: 1.8,
verticalAccuracy: 9,
course: 46.891,
speed: 1.5,
timestamp: Date())
并且你想序列化它。你可以包装它
let locationWrapper = CLLocationWrapper(location: location)
瞧!它被序列化了!
现在你可以把它发送到服务器,保存在用户默认设置中,或写入数据库
let jsonEncoder = JSONEncoder()
do {
let encodedLocationWrapper = try jsonEncoder.encode(locationWrapper.location)
// Do whatever you want with the wrapped location
} catch {
print("Error! Location wrapper encode failed: '\(error)'")
}
以及如何解码它?
非常简单
let jsonDecoder = JSONDecoder()
do {
let decodedLocationWrapper = try jsonDecoder.decode(CLLocationWrapper.self, from: encodedLocationWrapper)
// Do whatever you want with the wrapped location
} catch {
print("Error! Location wrapper decode failed: '\(error)'")
}
CocoaPods 管理你的 Xcode 项目的依赖项。有关安装说明和用法,请访问他们的网站。要将 CLLocationWrapper 集成到你的 Xcode 项目中,请在你的 Podfile
中指定它
pod 'CLLocationWrapper'
Swift Package Manager 是一个用于自动化 Swift 代码分发的工具,并且集成在 swift
编译器中。
一旦你设置了你的 Swift 包,添加 CLLocationWrapper 作为依赖项就像将其添加到你的 Package.swift
的 dependencies
值中一样简单。
dependencies: [
.package(url: "https://github.com/yonivav/CLLocationWrapper.git")
]
如果你不想使用任何提及的依赖项管理器,你可以手动将 CLLocationWrapper 集成到你的项目中。
你可以通过添加新功能、澄清当前代码或修复错误来做出贡献。为此,请打开一个 PR。当提交拉取请求时,请添加测试并确保你的更改不会破坏任何现有测试。
这个存储库的灵感来自这个 gist