Swift 5.6 Platforms CocoaPods Compatible Swift Package Index Swift Package Manager License

CLLocation+Codable

愿景

一个易于使用的 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

CocoaPods 管理你的 Xcode 项目的依赖项。有关安装说明和用法,请访问他们的网站。要将 CLLocationWrapper 集成到你的 Xcode 项目中,请在你的 Podfile 中指定它

pod 'CLLocationWrapper'

Swift Package Manager

Swift Package Manager 是一个用于自动化 Swift 代码分发的工具,并且集成在 swift 编译器中。

一旦你设置了你的 Swift 包,添加 CLLocationWrapper 作为依赖项就像将其添加到你的 Package.swiftdependencies 值中一样简单。

dependencies: [
    .package(url: "https://github.com/yonivav/CLLocationWrapper.git")
]

手动

如果你不想使用任何提及的依赖项管理器,你可以手动将 CLLocationWrapper 集成到你的项目中。

贡献

你可以通过添加新功能、澄清当前代码或修复错误来做出贡献。为此,请打开一个 PR。当提交拉取请求时,请添加测试并确保你的更改不会破坏任何现有测试。

致谢

这个存储库的灵感来自这个 gist