2017-12-28 35 views
0

Google지도를 사용하여 좌표에서 위치 정보를 가져 오려고합니다. JSON 형식으로 정보를 얻고 있습니다. 하지만 다음과 같은 오류가 발생합니다 - "조건부 바인딩의 초기화 프로그램에 선택적 형식이 있어야합니다. '모든'"다음은 내 코드입니다. 사전swift3의 UILabel에서 JSON 데이터를 가져 오는 방법

func getAddressForLatLng(currentlocation: CLLocation) { 

    let baseUrl = "https://maps.googleapis.com/maps/api/geocode/json?" 
    let apikey = "XYZ" 

    let url = NSURL(string: "\(baseUrl)latlng=\(currentlocation.coordinate.latitude),\(currentlocation.coordinate.longitude)&key=\(apikey)") 
    let data = NSData(contentsOf: url! as URL) 
    let json = try! JSONSerialization.jsonObject(with: data! as Data, options: JSONSerialization.ReadingOptions.allowFragments) as! NSDictionary 
    if let result = json["results"] as? NSArray { 
      let address = result[0] 
    //should try something here 

    } 
    } 

에 감사를 진행하는 방법에 나를 인도 내 주소 데이터는 제발 :

{ 
"address_components" =  (
      { 
     "long_name" = "Woodpecker Nature Trail"; 
     "short_name" = "Woodpecker Nature Trail"; 
     types =    (
      route 
     ); 
    }, 
      { 
     "long_name" = "Point Reyes Station"; 
     "short_name" = "Point Reyes Station"; 
     types =    (
      locality, 
      political 
     ); 
    }, 
      { 
     "long_name" = "Marin County"; 
     "short_name" = "Marin County"; 
     types =    (
      "administrative_area_level_2", 
      political 
     ); 
    }, 
      { 
     "long_name" = California; 
     "short_name" = CA; 
     types =    (
      "administrative_area_level_1", 
      political 
     ); 
    }, 
      { 
     "long_name" = "United States"; 
     "short_name" = US; 
     types =    (
      country, 
      political 
     ); 
    }, 
      { 
     "long_name" = 94956; 
     "short_name" = 94956; 
     types =    (
      "postal_code" 
     ); 
    } 
); 
"formatted_address" = "Woodpecker Nature Trail, Point Reyes Station, CA 94956, USA"; 
geometry =  { 
    bounds =   { 
     northeast =    { 
      lat = "38.0396711"; 
      lng = "-122.8005417"; 
     }; 
     southwest =    { 
      lat = "38.0376697"; 
      lng = "-122.8028458"; 
     }; 
    }; 
    location =   { 
     lat = "38.0376744"; 
     lng = "-122.802158"; 
    }; 
    "location_type" = "GEOMETRIC_CENTER"; 
    viewport =   { 
     northeast =    { 
      lat = "38.0400193802915"; 
      lng = "-122.8003447697085"; 
     }; 
     southwest =    { 
      lat = "38.0373214197085"; 
      lng = "-122.8030427302915"; 
     }; 
    }; 
}; 
"place_id" = ChIJAQAAwK7GhYARCiC5K45QogM; 
types =  (
    route 
); 
} 
+1

어떤에서 당신은 오류가 발생했습니다 '선? –

답변

1

이 코드를 시도

func getAddressForLatLng(latitude: String, longitude: String) { 
    let url = NSURL(string: "\(baseUrl)latlng=\(latitude),\(longitude)&key=\(apikey)") 
    let data = NSData(contentsOfURL: url!) 
    let json = try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as! NSDictionary 
    if let result = json["results"] as? NSArray { 
     if let address = result[0]["address_components"] as? NSArray { 
      let number = address[0]["short_name"] as! String 
      let street = address[1]["short_name"] as! String 
      let city = address[2]["short_name"] as! String 
      let state = address[4]["short_name"] as! String 
      let zip = address[6]["short_name"] as! String 
      print("\n\(number) \(street), \(city), \(state) \(zip)") 
     } 
    } 
} 

여기에서 Reference을 가져 가라.

1

주어진 코드가 제대로 작동하므로 address 개체를 무언가에 캐스팅하려고하는 중에 오류가 발생한다고 생각합니다. 그것을위한 코드 아래

점검 :

if let result = json["results"] as? NSArray { 
     if let address = result[0] as? [String: AnyObject] { //Cast your object here 
      let formatted_address = address["formatted_address"] as? String ?? "" 
      print(formatted_address) //Here you will get your coordinate address 
     } 
    }