-1
当我从服务器获取数据,将显示下面我的代码致命错误:意外发现零而展开的可选值JSON
URLSession.shared.dataTask(with: myRequest, completionHandler: { (data:Data?, response:URLResponse?, error:Error?) -> Void in
DispatchQueue.main.async {
if error != nil {
}
do {
if let json = try JSONSerialization.jsonObject(with: (data)!, options: .mutableContainers) as? NSMutableDictionary {
}
}
}
不能使用尝试DO/catch块之外,无须转换为可选,另外JSONSerialization返回任何,所以它必须强制转换,这一切却可以在一个以及制作后卫语句来完成:后卫let data = data,让dict =(try?JSONSerialization.jsonObject(...))为? [字符串:任何]其他{//错误处理} – apocolipse
@apocolipse,我的错。忘了添加“?”。至于类型转换 - 这取决于需求。我不喜欢有这么多括号的巨大线条 – rkyr
JSON铸造是必要的。使用Swift 3.0,它的默认值为[Any]或[String:Any],因此返回Any,这样用户就可以选择他们投射的内容。 守卫/让绑定的美丽做到这一切意味着你可以把所有条件放在一个地方,如果有任何失败,尽早提供保释,但它们不需要在一行上,但可以拆分为三部分,而不是2,这消除了需要包装的尝试?声明以避免双重选择权。 – apocolipse