Swift Firebase Sort By Distance

荒凉一梦 提交于 2019-12-25 11:14:23

问题


I am trying to sort my array by distance. I already have everything hooked up to grab the distance's but unsure how to sort from closest to furthest from the users location. I've used the below code for MKMapItem's yet unsure how to apply to my current array.

func sortMapItems()  {
                    self.mapItems = self.mapItems.sorted(by: { (b, a) -> Bool in
                        return self.userLocation.location!.distance(from: a.placemark.location!) > self.userLocation.location!.distance(from: b.placemark.location!)
                    })
                }

Firebase Call

databaseRef.child("Businesses").queryOrdered(byChild: "businessName").observe(.childAdded, with: { (snapshot) in

        let key = snapshot.key

        if(key == self.loggedInUser?.uid) {
            print("Same as logged in user, so don't show!")
        } else {
            if let locationValue = snapshot.value as? [String: AnyObject] {
                let lat = Double(locationValue["businessLatitude"] as! String)
                let long = Double(locationValue["businessLongitude"] as! String)
                let businessLocation = CLLocation(latitude: lat!, longitude: long!)

                let latitude = self.locationManager.location?.coordinate.latitude
                let longitude = self.locationManager.location?.coordinate.longitude
                let userLocation = CLLocation(latitude: latitude!, longitude: longitude!)

                let distanceInMeters : Double = userLocation.distance(from: businessLocation)
                let distanceInMiles : Double = ((distanceInMeters.description as String).doubleValue * 0.00062137)
                let distanceLabelText = "\(distanceInMiles.string(2)) miles away"

                var singleChildDictionary = locationValue
                singleChildDictionary["distanceLabelText"] = distanceLabelText as AnyObject
                self.usersArray.append(singleChildDictionary as NSDictionary)

                /*
                func sortMapItems()  {
                    self.mapItems = self.mapItems.sorted(by: { (b, a) -> Bool in
                        return self.userLocation.location!.distance(from: a.placemark.location!) > self.userLocation.location!.distance(from: b.placemark.location!)
                    })
                }
                */

            }


            //insert the rows
            self.followUsersTableView.insertRows(at: [IndexPath(row:self.usersArray.count-1,section:0)], with: UITableViewRowAnimation.automatic)
        }

    }) { (error) in
        print(error.localizedDescription)
    }
}

回答1:


First make these changes in your code

singleChildDictionary["distanceInMiles"] = distanceInMiles

Then you can sort it like this:

self.usersArray = self.usersArray.sorted {
        !($0["distanceInMiles"] as! Double > $1["distanceInMiles"] as! Double)
}


来源:https://stackoverflow.com/questions/45866712/swift-firebase-sort-by-distance

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!