由于从 api 展开值而崩溃(使用 Alamofire)[重复]
Posted
技术标签:
【中文标题】由于从 api 展开值而崩溃(使用 Alamofire)[重复]【英文标题】:Crash due to unwrapping values from api (using Alamofire) [duplicate] 【发布时间】:2018-04-06 14:33:23 【问题描述】:我有这个结构来解析我的 api 中的值..
struct Deals
let title: String
let detail: String
init(title : String, detail: String)
self.title = title
self.detail = detail
现在我正在以这种格式解析来自 Alamofire 的数据...
if httpResponse.statusCode == 200
if let result = response.result.value as? [String:Any]
guard let top = orderData["data"] as? [Any] else
return
for value in top
let aDict = value as? [String : Any]
let title = aDict!["title"] as? String
let detail = aDict!["description"] as? String
let theDeals = Deals(title: title!, detail: detail!)
但是其中一些值在服务器上的值为 nil(例如,detail 是来自服务器的 nil),因此它会导致崩溃。我很难正确使用if let
,以便可以处理崩溃。希望有人能帮忙...
【问题讨论】:
您的应用在哪一行崩溃 在这行let detail = aDict!["...
不要使用展开然后查看@CZ54的答案
您的数据包含 nil 值,但在您使用展开的代码中,这意味着它必须包含值,这就是您的应用崩溃的原因
【参考方案1】:
即使解析失败,您也正在解开 dict
。
更新到:
if httpResponse.statusCode == 200
guard let result = response.result.value as? [String:Any],
let top = orderData["data"] as? [Any]
else return
for value in top
if let aDict = value as? [String : Any],
let title = aDict["title"] as? String,
let detail = aDict["description"] as? String
let theDeals = Deals(title: title, detail: detail)
else
//parsing failed
【讨论】:
以上是关于由于从 api 展开值而崩溃(使用 Alamofire)[重复]的主要内容,如果未能解决你的问题,请参考以下文章