Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何解决致命错误:在swift 4中展开可选值时意外发现nil_Ios_Iphone_Swift - Fatal编程技术网

Ios 如何解决致命错误:在swift 4中展开可选值时意外发现nil

Ios 如何解决致命错误:在swift 4中展开可选值时意外发现nil,ios,iphone,swift,Ios,Iphone,Swift,我是swift的新手,请有人帮助/建议我。 我将请求发送到服务器并使用completionBlock。当登录按钮点击success completionBlock时,它正在调用,而我在这里被击中了 这是我的要求 typealias CompletionBlock = ( _ response : Any , _ error : Error) -> Void func login(userName: String, password: String, completionBloc

我是swift的新手,请有人帮助/建议我。 我将请求发送到服务器并使用completionBlock。当登录按钮点击success completionBlock时,它正在调用,而我在这里被击中了

这是我的要求

typealias CompletionBlock = ( _ response : Any , _ error : Error) -> Void


    func login(userName: String, password: String, completionBlock: @escaping CompletionBlock ) -> Void
{
    let parameter = ["gs_username":userName, "gs_password":password] as [String : AnyObject]
     let url = "user-login"
    let fullUrl = baseUrl?.appendingPathComponent(url)
    if ((userName != nil) && (password != nil)) {

        Alamofire.request(fullUrl!, method: .post, parameters: parameter, headers: nil)
            .validate()
            .responseJSON { response in
                switch response.result{
                case .success:
                    let json = response.result.value
                    completionBlock(json as Any, response.error!)
                    break
                case .failure(let error):
                    print("getEvents error: \(error)")
                    //completionBlock(nil as AnyObject, error)
                    break
                }
        }
    }
}
这是错误行

 completionBlock(json as Any, response.error!)
更新如下

func login(userName: String?, password: String?, completionBlock: @escaping CompletionBlock ) -> Void
{
    let parameter = ["gs_username":userName, "gs_password":password] as [String : AnyObject]
     let url = "user-login"
    let fullUrl = baseUrl?.appendingPathComponent(url)
    if ((userName != nil) && (password != nil)) {

        Alamofire.request(fullUrl!, method: .post, parameters: parameter, headers: nil)
            .validate()
            .responseJSON { response in
                switch response.result{
                case .success:
                    let json = response.result.value
                    completionBlock(json as Any, "No Error found")
                    break
                case .failure(let error):
                    print("getEvents error: \(error)")
                    //completionBlock(nil as AnyObject, error)
                    break
                   }
        }
    }
    }

您在哪一行收到错误?必须通过应用异常断点进行检查?json中的值是多少?如果是nill,则通过completionBlock(json作为?Any,response.error!)更改此行,然后选中
response.error
为nil,因此
response.error崩溃…@aBilal17,崩溃不是像任何
那样发生在
json上,崩溃发生在
response.error
。您的
响应。在
.success
案例中,error
nil
(无错误,连接成功),并且您正在尝试显式打开该值。将错误代码更改为空字符串或其他适当的类型,应该可以。如果他们解释问题和解决方案,而不是只转储代码,那么答案将更有帮助(对OP和未来的读者)。Hi@Rakesh Patel感谢您的回答,但它不接受字符串值,我更改了这一行completionBlock(json),“未找到错误”as!Error)。但我得到错误“Thread 1:SIGABRT”Error and in console”无法将类型为“Swift.String”(0x10781a9f8)的值转换为“Swift.Error”(0x7f88708e5798)。“@Appu,您需要将
completionBlock
参数更改为
Error
字符串,否则此代码将无法工作。make as-->typealias completionBlock=(u-response:Any,uu-Error:String)->voidThank@Kuldeep工作正常