如何从 SwiftLocation 5.1.0 中的位置获取 CLPlacemark?

How to get CLPlacemark from Location in SwiftLocation 5.1.0?

这是一个没有很好文档的库,过去,我在从以前的版本迁移到现代版本时遇到问题,现在,我又遇到了完全相同的问题。在 SwiftLocation 4 中,这是从某个位置获取地标的方法,将其传递给该位置的坐标:

SwiftLocation.LocationManager.shared.locateFromCoordinates(location.coordinate) { result in
    switch result {
    case .success(let places):
        guard let receivedPlacemark = places.first?.placemark else {
            return
        }
        logger.debug("Retrieved placemark: (receivedPlacemark.locality ?? "-")")
        self?.currentPlacemark = receivedPlacemark

        NotificationCenter.default.post(name: Constants.Notifications.placemarkUpdateNotification, object: nil)
    case .failure(let error):
        logger.error(error.localizedDescription)
        NotificationCenter.default.post(name: Constants.Notifications.placemarkUpdateNotification, object: nil)
    }
}

现在,在升级到 SwiftLocation 的 5.1.0 版本后,我根本无法在 GitHub 或库的 cocoapods 文档中找到如何对实际版本执行相同的操作。 SwiftLocation.LocationManager.shared.locateFromCoordinates 不存在,也找不到类似的东西。

如何使用 5.1.0 做到这一点?

您要实现的过程名称是地理编码

据我所知,位置 API 发生了一些变化,因此您要查找的代码是(来自文档):

let service = // insert your service here
SwiftLocation.geocodeWith(service).then { result in
    // You will get an array of suggested [GeoLocation] objects with data and coordinates
    print(result.data)
}

其中service应该等于您选择的服务,但是如果我们想使用Apple引擎获取给定坐标的数据,您可以尝试:

let service = Geocoder.Apple(coordinates: location) //location must be CLLocationCoordinate2D