1
        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 并且有效。我该怎么做才能修复它?

4

2 回答 2

2

URL(string:"urlstring")返回一个可选值,当它的值为 nil 时,您将在下一行强制展开,您应该使用guard letif 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

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)
                }
        }
}

如果你没有做任何其他事情,那么在开始时使用 guard let 返回。

您可以在此处阅读有关 swift 基础知识和可选内容的信息。

于 2016-06-18T22:10:22.033 回答
2

好吧,解决方案是添加!在字符串格式中的每个变量之后,以使其成为非可选的。

let stringUrl = "\(SERVER_HOST)...\(FBUser.id!)..."
于 2016-06-19T07:02:12.853 回答