我不知道我在哪里做错了。索引4超越界限[0..3]'...终止应用程序由于未捕获的异常'NSRangeException'
let recievedJson = json
let results = recievedJson["results"] as! NSArray
let resultsDic = results[0] as! NSDictionary
let address = resultsDic["address_components"] as? NSArray
let zipcodeDic = address?[0] as! NSDictionary
let cityNameDic = address?[1] as! NSDictionary
let countyDic = address?[2] as! NSDictionary
let stateDic = address?[3] as! NSDictionary
let countryDic = address?[4] as! NSDictionary
let zipcode = zipcodeDic["long_name"] as! String
let cityName = cityNameDic["long_name"] as! String
let countyName = countyDic["long_name"] as! String
let stateName = stateDic["long_name"] as! String
let stateShortName = stateDic["short_name"] as! String
let countryName = countryDic["long_name"] as! String
let countryShortName = countryDic["short_name"] as! String
试图从这个JSON响应
http://maps.googleapis.com/maps/api/geocode/json?address=23508&sensor=true
这个工作对我来说,小的改变@Danh答案检索数据。
let recievedJson: [String: Any] = json as! [String : Any]
if let results = recievedJson["results"] as? [[String: Any]] {
if results.count > 0 {
let resultsDic = results[0]
if let address = resultsDic["address_components"] as? [[String: Any]] {
for dict in address {
if let longName = dict["long_name"] as? String,
let shortName = dict["short_name"] as? String,
let types = dict["types"] as? [String] {
if types.contains("postal_code") {
print("postal_code: \(longName)")
} else if types.contains("locality") {
print("city: \(longName)")
} else if types.contains("administrative_area_level_2") {
print("county: \(longName)")
} else if types.contains("administrative_area_level_1") {
print("state: \(longName)")
} else if types.contains("country") {
print("country: \(longName)")
}
}
}
}
}
}
这是不是一个好主意做出这样的假设提取的地址组成部分。代码防守。摆脱所有的'as!'并使用'如果让...作为? ...'。在尝试访问特定索引之前检查数组数量。 – rmaddy
而且由于您使用Swift,请避免使用'NSDictionary'和'NSArray'。使用适当类型信息的Swift字典和Swift数组。 – rmaddy
@rmaddy如果我不使用NSArray/NSDictionary,xcode显示错误“模糊引用成员下标'” – Karen