Ios 开关必须详尽无遗/无法找到';JSON';范围内
伙计们! 我的应用程序又一次崩溃了,我不知道该怎么办。有人能帮忙吗?! 顺便说一句,我是初学者。。我在学习。求你了,仁慈点 请求(URL\u USER\u ADD,方法:.post,参数:body,编码:JSONEncoding.default,headers:header).responseJSON{(响应)in 查看错误的图像 谢谢Ios 开关必须详尽无遗/无法找到';JSON';范围内,ios,json,swift,alamofire,xcode12,Ios,Json,Swift,Alamofire,Xcode12,伙计们! 我的应用程序又一次崩溃了,我不知道该怎么办。有人能帮忙吗?! 顺便说一句,我是初学者。。我在学习。求你了,仁慈点 请求(URL\u USER\u ADD,方法:.post,参数:body,编码:JSONEncoding.default,headers:header).responseJSON{(响应)in 查看错误的图像 谢谢 你的应用程序没有崩溃。它无法编译 “开关必须是详尽的”表示您没有处理所有可能出现的响应的情况。结果。因为您的代码片段不包含上下文,我只能根据自己的经验和您提供的
你的应用程序没有崩溃。它无法编译 “
开关
必须是详尽的”表示您没有处理所有可能出现的响应的情况。结果
。因为您的代码片段不包含上下文,我只能根据自己的经验和您提供的响应的代码进行猜测。结果
是一个快速的结果
。在这种情况下,除了。成功(\ux)
您还必须处理。故障(\ux)
switch response.result
{
案例。成功(让结果):
//您已经拥有的代码-稍后会有更多关于这方面的内容
//丢失的东西
案例。失败(let错误):
//在这里做一些对你的应用程序有意义的错误处理
}
所以这是第一件事,但是你也有一个错误,JSON
没有定义。事实上,我在你的屏幕截图或代码片段中没有看到它的定义,但可能它(或你想提到的类似东西)的定义超出了我所能看到的范围
如果它在您正在使用的框架(或Swift包)中,请确保在文件顶部导入该框架。或者您是否打算使用Foundation
JSON转换工具(JSONSerialization
或JSONDecoder
)
补遗
根据评论中的对话,我认为这就是你想要做的:
switch response.result
{
案例。成功(让结果):
guard let json=try?json(数据:结果)else{fallthrough}
让id=json[“_id”].stringValue
让color=json[“avatarColor”].stringValue
让avatarName=json[“avatarName”].stringValue
让email=json[“email”].stringValue
让name=json[“name”].stringValue
UserDataService.instance.setUserData(id:id,color:color,avatarName:avatarName,email:email,name:name)
完成(真)
案例失败(let错误)
完成(假)
debugPrint(response.result,如有)
}
你的应用程序没有崩溃。它无法编译
“开关
必须是详尽的”表示您没有处理所有可能出现的响应的情况。结果
。因为您的代码片段不包含上下文,我只能根据自己的经验和您提供的响应的代码进行猜测。结果
是一个快速的结果
。在这种情况下,除了。成功(\ux)
您还必须处理。故障(\ux)
switch response.result
{
案例。成功(让结果):
//您已经拥有的代码-稍后会有更多关于这方面的内容
//丢失的东西
案例。失败(let错误):
//在这里做一些对你的应用程序有意义的错误处理
}
所以这是第一件事,但是你也有一个错误,JSON
没有定义。事实上,我在你的屏幕截图或代码片段中没有看到它的定义,但可能它(或你想提到的类似东西)的定义超出了我所能看到的范围
如果它在您正在使用的框架(或Swift包)中,请确保在文件顶部导入该框架。或者您是否打算使用Foundation
JSON转换工具(JSONSerialization
或JSONDecoder
)
补遗
根据评论中的对话,我认为这就是你想要做的:
switch response.result
{
案例。成功(让结果):
guard let json=try?json(数据:结果)else{fallthrough}
让id=json[“_id”].stringValue
让color=json[“avatarColor”].stringValue
让avatarName=json[“avatarName”].stringValue
让email=json[“email”].stringValue
让name=json[“name”].stringValue
UserDataService.instance.setUserData(id:id,color:color,avatarName:avatarName,email:email,name:name)
完成(真)
案例失败(let错误)
完成(假)
debugPrint(response.result,如有)
}
第一个屏幕显示的是教师代码:
第二个是我的,因为我拒绝将错误作为响应的属性:
第一个屏幕显示的是教师代码: 第二个是我的,因为我拒绝将错误作为响应的属性:
add case.failure你的应用程序没有崩溃,你的应用程序没有编译。add case.failure你的应用程序没有崩溃,你的应用程序没有编译。明白了。所以切换必须不仅仅是一个失败或成功,必须是两个。好吧!当我在观看在线课程时,老师说我们数据,因为JSON的作用是它从响应数据。让json=json(数据:数据)JSON假设是一个初始化器,使用“import SwiftyJSON”,但仍然失败。一般来说,
开关
必须处理所有可能打开的情况。对于枚举
类型,即结果
而言,这通常意味着显式处理每个情况,但对于字符串
之类的某些事情,通常需要e包含一个默认值
案例。失败的原因是与以前相同的错误?还是其他原因?否是不同的,它说:let json=json(data:data)XCall可以抛出,但它没有标记为“尝试”,错误也没有被处理。我很震惊。哈哈,没有错误!它成功了!非常感谢。这是一个很好的教训!明白了。所以切换必须不仅仅是一个失败或成功,必须是两个。好吧!正如我在观看在线课程时,老师说的那样
switch response.result {
case .success(let result):
if let json = result as? Data {
guard let data = response.data else { return }
let json = JSON(data: data)
let id = json["_id"].stringValue
let color = json["avatarColor"].stringValue
let avatarName = json["avatarName"].stringValue
let email = json["email"].stringValue
let name = json["name"].stringValue
UserDataService.instance.setUserData(id: id, color: color, avatarName: avatarName, email: email, name: name)
completion(true)
} else {
completion(false)
debugPrint(response.result as Any)