Как вы упомянули, этот promise
возвращает массив CLPlacemark
объектов, поэтому вам нужно получить конкретный placemark
из array
и затем использовать его. Вот пример доступа к first
placemark
в array
.
.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 ?? ""))
}
}
Редактировать
Для обработки в США и ЦА соответствующая метка для этой страны может быть извлечена, как показано ниже,
.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)
}
}