Установите глобальную переменную из функции GeoCoder Swift - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть глобальная переменная "filterError", которая изначально установлена ​​в false перед оператором switch.Когда происходит оператор switch, он просматривает словарь и для каждого ключа выполняет уникальную логическую проверку значения.Если это значение не соответствует определенным критериям, тогда булевой переменной filterError будет присвоено значение true.

Когда инструкция switch завершена, если filterErrror имеет значение false, действие будет происходить так:

//...switch statement...

if (filterErrror == false) {
    //do something.....
}

Проблема, с которой я столкнулся, связана с функцией геокодера, которая имеет место взаявление переключателя.Если переменная switch key = "area", то выполняется следующее:

var geocoder = CLGeocoder()
geocoder.geocodeAddressString(address) { (placemarks, error) in

    guard let placemarks = placemarks,let location = placemarks.first?.location
    else { print("Error in finding location") return }
    let distanceInMeters = location.distance(from: coordinateSelf)
    print("The distance between property and user in miles is: \(distanceInMeters/1609)")
    distanceInMiles = distanceInMeters/1609
    var radius = Double()

    if searchRadius == "this area only" {
        radius = 0.49999999999
    } else {
        radius = Double(Int(searchRadius)!)
    }
    if (radius < distanceInMiles) {
        filterError = true
    }
}

Однако, filterError все еще имеет значение false после завершения оператора switch, поскольку логическое значение не изменяется.Как установить для filterError значение true из геокодера?

Это полный код:

for filter in self.activeFilters {
                                switch filter.key {
                                case "listingType":
                                    if(filter.value[0] != propertiesFirestore[i]["listingType"]![0]){
                                        filterError = true
                                    }
                                case "minBedsBound":
                                    if(filter.value[0] != "No min. beds") {
                                        if(filter.value[0].filter("01234567890.".contains) > propertiesFirestore[i]["bedroomCount"]![0]) {
                                            filterError = true
                                        }
                                    }
                                case "maxBedsBound":
                                    if(filter.value[0] != "No max. beds") {
                                        if(Int(filter.value[0].filter("01234567890.".contains))! < Int(propertiesFirestore[i]["bedroomCount"]![0])!) {
                                            filterError = true
                                        }
                                    }
                                case "minPriceBound":
                                    if(filter.value[0] != "No min. price") {
                                        if(Int(filter.value[0].filter("01234567890.".contains))! > Int(propertiesFirestore[i]["price"]![0])!) {
                                            filterError = true
                                        }
                                    }
                                case "maxPriceBound":
                                    if(filter.value[0] != "No max. price") {
                                        if(Int(filter.value[0].filter("01234567890.".contains))! < Int(propertiesFirestore[i]["price"]![0])!) {
                                            filterError = true
                                        }
                                    }
                                case "includeSharedOwnership":
                                    if(filter.value[0] != propertiesFirestore[i]["sharedOwnership"]![0]) {
                                        filterError = true
                                    }
                                case "includeRetirementHomes":
                                    if(filter.value[0] != propertiesFirestore[i]["retirementHome"]![0]) {
                                        filterError = true
                                    }
                                case "area":
                                    print(userlatitude)
                                    print(userlongitude)

                                    let address = "\(propertiesFirestore[i]["area"]![0]), \(propertiesFirestore[i]["postcodePrefix"]![0])"
                                    var propLat = String()
                                    var propLong = String()
                                    var distanceInMiles = Double()
                                    var searchRadius = self.activeFilters["searchRadius"]![0]
                                    let coordinateSelf = CLLocation(latitude: Double(userlatitude) as! CLLocationDegrees, longitude: Double(userlongitude) as! CLLocationDegrees)

                                    var geocoder = CLGeocoder()
                                    geocoder.geocodeAddressString(address) { (placemarks, error) in
                                        guard
                                            let placemarks = placemarks,
                                            let location = placemarks.first?.location
                                            else {
                                                print("Error in finding location")
                                                return
                                        }
                                        let distanceInMeters = location.distance(from: coordinateSelf)
                                        print("The distance between property and user in miles is: \(distanceInMeters/1609)")
                                        distanceInMiles = distanceInMeters/1609
                                        var radius = Double()
                                        if searchRadius == "this area only" {
                                            radius = 0.49999999999
                                        } else {
                                            radius = Double(Int(searchRadius)!)
                                        }
                                        if (radius < distanceInMiles) {
                                            filterError = true
                                        }
                                    }
                                case "keywords":
                                    print("Filter keywords are: \(filter.value)")
                                    for j in 0..<propertiesFirestore[i]["keywords"]!.count {
                                        propertiesFirestore[i]["keywords"]![j] = propertiesFirestore[i]["keywords"]![j].lowercased()
                                    }
                                    for keyword in filter.value {
                                        if propertiesFirestore[i]["keywords"] == nil {
                                            filterError = true
                                        } else if ((propertiesFirestore[i]["keywords"]!.contains(keyword.lowercased()))) {
                                            print("found keyword")
                                        } else {
                                            filterError = true
                                        }
                                    }

                                default:
                                    print("Unknown filter: \(filter.key)")

                            }

                            }

                            if filterError == false {
                                filterProperties.append(propertiesFirestore[i])
                            } else {
                                print("FITLER CATCHOUT")
                            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...