Swift - Generate an Address Format from Reverse Geocoding

前端 未结 10 1409
难免孤独
难免孤独 2021-01-31 03:46

I am trying to generate a Formatted Full address using CLGeocoder in Swift 3. I referred to this SO thread to get the code given below.

However, sometimes the app crashe

10条回答
  •  梦毁少年i
    2021-01-31 04:22

    func convertLatLongToAddress(latitude:Double, longitude:Double) {
        let geoCoder = CLGeocoder()
        let location = CLLocation(latitude: latitude, longitude: longitude)
        var labelText = ""
        geoCoder.reverseGeocodeLocation(location, completionHandler: { (placemarks, error) -> Void in
    
            var placeMark: CLPlacemark!
            placeMark = placemarks?[0]
    
            if placeMark != nil {
                if let name = placeMark.name {
                    labelText = name
                }
                if let subThoroughfare = placeMark.subThoroughfare {
                    if (subThoroughfare != placeMark.name) && (labelText != subThoroughfare) {
                        labelText = (labelText != "") ? labelText + "," + subThoroughfare : subThoroughfare
                    }
                }
                if let subLocality = placeMark.subLocality {
                    if (subLocality != placeMark.subThoroughfare) && (labelText != subLocality) {
                        labelText = (labelText != "") ? labelText + "," + subLocality : subLocality
                    }
                }
                if let street = placeMark.thoroughfare {
                    if (street != placeMark.subLocality) && (labelText != street) {
                        labelText = (labelText != "") ? labelText + "," + street : street
                    }
                }
                if let locality = placeMark.locality {
                    if (locality != placeMark.thoroughfare) && (labelText != locality) {
                        labelText = (labelText != "") ? labelText + "," + locality : locality
                    }
                }
                if let city = placeMark.subAdministrativeArea {
                    if (city != placeMark.locality) && (labelText != city) {
                        labelText = (labelText != "") ? labelText + "," + city : city
                    }
                }
                if let state = placeMark.postalAddress?.state {
                    if (state != placeMark.subAdministrativeArea) && (labelText != state) {
                        labelText = (labelText != "") ? labelText + "," + state : state
                    }
    
                }
                if let country = placeMark.country {
                    labelText = (labelText != "") ? labelText + "," + country : country
                }
                // labelText gives you the address of the place
            }
        })
    }
    

    Here as an improvement I added place name as well. It makes address more meaningful.

提交回复
热议问题