Ios 如何解决致命错误:在swift 4中展开可选值时意外发现nil
我是swift的新手,请有人帮助/建议我。 我将请求发送到服务器并使用completionBlock。当登录按钮点击success completionBlock时,它正在调用,而我在这里被击中了 这是我的要求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
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工作正常