我遇到了以下麻烦。通过客户端iOS应用程序与特定的后端服务协作发送2种类型的响应:成功时的JSON和错误的简单文本。
对于JSON,我有简单的可解码结构:
struct Response: Decodable {
let message: String
}
并且直到服务器在http正文中发送简单文本并且我收到以下错误:
"错误域= NSCocoaErrorDomain代码= 3840" JSON文本未启动 使用数组或对象以及允许未设置片段的选项。"
对于这种情况,响应结构可能更普遍吗?
答案 0 :(得分:2)
没有简单的方法让你的Decodable
结构处理这样的错误,因为如果您尝试解码的Data
不是有效的JSON,{{1方法甚至不被调用,因此您需要处理初始化程序范围之外的错误。
一种可能的解决方案是处理init(from decoder:)
方法的catch块中的错误。一旦JSONDecoder.decode(Response.self,from:)
函数抛出错误,您可以检查错误是否是由于输入错误(在这种情况下,很可能意味着输入是一个简单的字符串而不是JSON)并且您可以简单地转换响应数据到decode
,然后调用String
的成员初始化程序,用字符串响应初始化它。
以下示例显示如何使用两个示例响应来处理此类情况,一个是有效的JSON,另一个是简单的字符串。
Response