我如何在 Swift 中安全地解压可选项(AlamoFire 响应对象)
How do I safely unpack optionals (AlamoFire response object) in Swift
我正在使用以下代码从服务器下载数据。根据 Crashlytics,我们看到在条件评估('if' 语句)中发生了崩溃(EXC_BREAKPOINT)。我怀疑这是因为解压可选成员 "statusCode" 的代码 - 我是 Swift 的新手(10 年从事 Obj-C) - 我不确定最好、最安全的解压方法是什么变量而不会导致崩溃。
请注意,此应用使用 SwiftyJSON,但我认为这无关紧要。
Alamofire.request(url).responseJSON { (response) in
if (response.response?.statusCode)! >= 200 && (response.response?.statusCode)! < 300
Alamofire.request(url).validate().responseJSON { response in
switch response.result {
case .success(let json):
// do something with json
case .failure(let error):
// handle error
}
}
validate()
方法替换了检查 statusCode
的行。它默认使用 acceptableStatusCodes
即 200..<300
.
我认为这是处理这个具体案例的最佳方式。
对于更一般的情况,您应该避免强制展开。使用 guard
或 if let
解包可选。 Swift 文档对此进行了详细解释。
我正在使用以下代码从服务器下载数据。根据 Crashlytics,我们看到在条件评估('if' 语句)中发生了崩溃(EXC_BREAKPOINT)。我怀疑这是因为解压可选成员 "statusCode" 的代码 - 我是 Swift 的新手(10 年从事 Obj-C) - 我不确定最好、最安全的解压方法是什么变量而不会导致崩溃。
请注意,此应用使用 SwiftyJSON,但我认为这无关紧要。
Alamofire.request(url).responseJSON { (response) in if (response.response?.statusCode)! >= 200 && (response.response?.statusCode)! < 300
Alamofire.request(url).validate().responseJSON { response in
switch response.result {
case .success(let json):
// do something with json
case .failure(let error):
// handle error
}
}
validate()
方法替换了检查 statusCode
的行。它默认使用 acceptableStatusCodes
即 200..<300
.
我认为这是处理这个具体案例的最佳方式。
对于更一般的情况,您应该避免强制展开。使用 guard
或 if let
解包可选。 Swift 文档对此进行了详细解释。