【发布时间】:2016-01-19 08:40:32
【问题描述】:
我正在尝试将 JSON 数据解析为字典,用于解析我使用的是单独的方法,稍后想将结果(字典)用于另一种方法中的其他操作,而不仅仅是按原样打印出来在网上的许多例子中给出,例如。 G。 here.
但是,我不能返回值,因为我被要求在 guard 中插入 return 语句,但是在插入后得到“非 void 函数应该返回一个值” .
代码如下所示:
func extractJSONDictionaryFrom(JSONData:NSData) ->NSMutableDictionary
{
var dict = NSMutableDictionary()
do {
guard let JSON = try NSJSONSerialization.JSONObjectWithData(JSONData, options:NSJSONReadingOptions(rawValue: 0)) as? NSDictionary else {
print("Not a Dictionary")
return
}
dict = NSMutableDictionary(dictionary: JSON)
}
catch let JSONError as NSError {
print("\(JSONError)")
}
print("The JSON is \(dict)")
return dict
}
The approach 使用 throw 也几乎没有用,因为我需要在调用“extractJSONDictionaryFrom”时处理其他方法中的 throws
【问题讨论】:
-
为什么
throw不好?如果方法被标记为throws错误,那么如果你在没有do-catch块的情况下执行JSONObjectWithData,则会抛出NSJSONSerialization错误。但是您可以选择抛出您自己的错误(无论是自定义ErrorType类型,如该链接中所示,或者您自己的NSError对象,如果您愿意)。 -
但是当我调用该方法时,我需要在另一个方法中处理抛出,不是吗?我想只处理一种方法,以后避免这样做。
-
没关系,但是如果你不抛出错误,你必须检查
nil,你不会知道它为什么失败。但是如果调用者不需要知道失败的原因,那么继续使用可选的。使用任何你想要的方法。
标签: swift try-catch nsjsonserialization do-catch