位置管理变得简单。
iOS 9 引入了请求一次性递送用户当前位置的能力。此方法不会让位置服务长时间运行,超出了获取位置固定所必需的时间。一个常见的用例是将位置更新与某个动作关联,以便用户在需要时刷新他们的位置。
import Geode
let locator = Geode.GeoLocator(.OneShot)
@IBAction func updateLocationAction() {
locator.requestLocationUpdate { location in
debugPrint("Current location: \(location)")
}
}
持续位置访问(iOS 9 之前可用的唯一方法)会在用户的位置发生变化时向您的应用程序提供位置更新。这种方法的代价是增加了电池使用量,但会提供最新的位置数据。
例如,您可能将位置监控与视图控制器的生命周期相关联
import Geode
let locator = Geode.GeoLocator(.Continuous)
override func viewDidLoad() {
super.viewDidLoad()
locator.startMonitoring { location in
debugPrint("Current location: \(location)")
}
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated: animated)
locator.stopMonitoring()
}
调试位置服务最有效的方法之一是从您的 CLLocationManagerDelegate
进行日志记录。Geode 的实现使用了大量的日志语句,所有这些语句都委托给默认为 nil
的 logHandler
回调。这允许与现有的日志框架(例如 CocoaLumberjack)轻松集成。
public typealias LogHandler = (message: () -> String, level: LogLevel, file: StaticString, line: UInt) -> Void
参数《message
《作为一个闭包传递,这使我们有可能避免处理任何不必要字符串,如果日志级别不是足够高。一个简单的日志实现可能看起来像以下内容
locator.logHandler = { message, level, file, line in
debugPrint("[GEODE] \(String(level).uppercaseString) \(file) L\(line): \(message())")
}
Geode 在 MIT 许可下发布。有关详情,请参阅 LICENSE。