let url = URL(string: "\(SERVER_HOST)/post?fb_id=\(fb_user)")
var request = URLRequest(url: url!) // Crashes here
Alamofire.request(request)
.responseJSON { response in
switch response.result {
case .failure(let error):
onComplete(success: false)
case .success(let responseObject):
onComplete(success: true)
}
}
崩溃错误:
致命错误:在解包可选值时意外发现nil
它在Swift 3之前起作用了。
它是NSURLRequest并且它起作用了。我该怎么做才能解决它?
答案 0 :(得分:2)
guard let
会返回一个可选项,当你的nil值为0时,你会强行在下一行展开,你应该使用if let
或guard let url = URL(string: "\(SERVER_HOST)/post?fb_id=\(fb_user)") else {
return
}
var request = URLRequest(url: url)
Alamofire.request(request)
.responseJSON { response in
switch response.result {
case .failure(let error):
onComplete(success: false)
case .success(let responseObject):
onComplete(success: true)
}
}
这样
if let url = URL(string: "\(SERVER_HOST)/post?fb_id=\(fb_user)") {
var request = URLRequest(url: url!)
// and rest of the code
Alamofire.request(request)
.responseJSON { response in
switch response.result {
case .failure(let error):
onComplete(success: false)
case .success(let responseObject):
onComplete(success: true)
}
}
}
或者你可以使用if
BACnet
如果你没有做任何其他事情,那么请在开始时使用guard let返回。
您可以阅读有关swift基础知识和可选here的内容。
答案 1 :(得分:2)
嗯,解决方案是添加!在字符串格式化中的每个变量之后,为了使其成为非可选项。
let stringUrl = "\(SERVER_HOST)...\(FBUser.id!)..."