我有这个 json 结果。 我会采取“警报”字段。 我试试这个:
var alert: NSString = jsonResult["features"]["properties"]["alert"]
但这是错误:没有名为“下标”的成员。 我无法访问嵌套字典中的字段
{
features = (
{
geometry = {
coordinates = (
"-97.95359999999999",
"37.2382",
5
);
type = Point;
};
id = usb000si7g;
properties = {
alert = green;
cdi = "5.8";
code = b000si7g;
detail = "http://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/usb000si7g.geojson";
dmin = "0.017";
felt = 1258;
gap = 38;
ids = ",usb000si7g,";
mag = "4.3";
magType = mwr;
mmi = "4.94";
net = us;
nst = "<null>";
place = "8km SE of Harper, Kansas";
rms = "0.51";
sig = 864;
sources = ",us,";
status = reviewed;
time = 1412272884590;
title = "M 4.3 - 8km SE of Harper, Kansas";
tsunami = "<null>";
type = earthquake;
types = ",cap,dyfi,general-link,geoserve,losspager,moment-tensor,nearby-cities,origin,phase-data,shakemap,tectonic-summary,";
tz = "-300";
updated = 1412614943519;
url = "http://earthquake.usgs.gov/earthquakes/eventpage/usb000si7g";
};
type = Feature;
}
);
metadata = {
api = "1.0.13";
count = 1;
generated = 1412617232000;
status = 200;
title = "USGS Significant Earthquakes, Past Week";
url = "http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/significant_week.geojson";
};
type = FeatureCollection;
}
我不知道该怎么办。 swift 在每个测试版中都会更改。
最佳答案
正如@Kirsteins 所说是他的答案,你必须做很多解包,建议使用 JSON 库。
如果您仍然想坚持手工提取,那么我建议您以编程方式进行提取,例如向 NSDictionary
添加扩展,如下所示:
extension NSDictionary {
func objectForTreeKeys<T>(keys:[String]) -> T? {
var dict: NSDictionary? = self
var retValue: T?
for key in keys {
var value: AnyObject? = dict?.objectForKey(key)
if let unwrapped = value as? NSDictionary {
dict = unwrapped
} else if let unwrapped = value as? T {
retValue = unwrapped
break
} else {
retValue = nil
break
}
}
return retValue
}
}
您将一组键传递给该函数,它会遍历所有嵌套字典,直到:
- 遇到类型为
T
的值 - 找到了一个类型不同于
NSDictionary
和T
的值 - 找到一个
nil
值
在第一种情况下,它返回 T
类型的值 - 在其他情况下它返回 nil
。
您可以按如下方式使用它:
let ret: String? = jsonResult.objectForTreeKeys(["features", "properties", "alert"])
如您所见,它是一个泛型方法,返回类型是从结果分配给的变量的类型推断出来的——所以有必要显式定义它的类型,它必须是可选的 (String?
在这种特定情况下)。
关于ios - 快速取消 NSDictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26221932/