首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法展开Promise<[CLPlacemark]> ]

无法展开Promise<[CLPlacemark]> ]
EN

Stack Overflow用户
提问于 2018-11-03 09:21:06
回答 1查看 153关注 0票数 1

我有一种方法试图更新我的授权状态。

使用PromiseKit 6,SWIFT4.2,我似乎不能让我的Promise成为一个CLPlacemark。

这将导致一系列错误。

代码语言:javascript
复制
Value of type 'Promise<[CLPlacemark]>' has no member 'foo'

下面看看我的代码:

代码语言:javascript
复制
func updateAuthStatus(status: CLAuthorizationStatus) {
    if status == .authorizedWhenInUse {
        titleLabel.isHidden = true
        bigIconView.isHidden = true
        descriptionLabel.isHidden = true
        grantBtn.isHidden = true
        titleLabel1.isHidden = false
        loaderView.isHidden = false
        loaderView.resumeSpinning()
        CLLocationManager.requestLocation().compactMapValues { location in
            return self.coder.reverseGeocode(location: location)
        }.compactMapValues { placemark -> Void in
            if placemark.ISOcountryCode == "CA" {
                self.seal.fulfill(())
            } else if placemark.ISOcountryCode == "US" {
                if self.allowedStates.contains(placemark.administrativeArea ?? "") {
                    self.seal.fulfill(())
                } else {
                        self.seal.reject(LocationError.InvalidState(placemark.administrativeArea ?? ""))
                }
            } else {
        self.seal.reject(LocationError.InvalidCountry(placemark.ISOcountryCode ?? ""))
            }
        }
    }
    else if status == .denied || status == .restricted {
        if denied == false {
            self.seal.reject(LocationError.Unknown)
        }
        denied = true
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-04 05:53:22

正如您所提到的,这个promise正在返回一个CLPlacemark对象数组,因此您需要从array中获取特定的placemark,然后使用它。下面是通过访问first placemarkarray中的示例。

代码语言:javascript
复制
.compactMapValues { placemarks -> Void in
            guard let placemark = placemarks.first else { return }

            if placemark.ISOcountryCode == "CA" {
                self.seal.fulfill(())
            } else if placemark.ISOcountryCode == "US" {
                if self.allowedStates.contains(placemark.administrativeArea ?? "") {
                    self.seal.fulfill(())
                } else {
                  self.seal.reject(LocationError.InvalidState(placemark.administrativeArea ?? ""))
                }
            } else {
        self.seal.reject(LocationError.InvalidCountry(placemark.ISOcountryCode ?? ""))
            }
        }

编辑

要处理美国和CA,可以提取该国的相关地名如下,

代码语言:javascript
复制
.compactMapValues { placemarks -> Void in
       if let ca = placemarks.filter{ $0.ISOcountryCode == "CA"}.first {
            self.seal.fulfill(())
       } else if let usa = placemarks.filter{ $0.ISOcountryCode == "US"}.first {
            if self.allowedStates.contains(usa.administrativeArea ?? "") {
                self.seal.fulfill(())
            } else {
                let error = LocationError.InvalidState(usa.administrativeArea ?? "")
                self.seal.reject(error)
            }
    } else {
         let error = LocationError.InvalidCountry(placemarks.first?.ISOcountryCode ?? "")
         self.seal.reject(error)
     }
 }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53129989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档