gpt4 book ai didi

ios - 什么情况下JSONSerialization.data(withJSONObject :) throw a catchable error?

转载 作者:IT王子 更新时间:2023-10-29 05:36:55 24 4
gpt4 key购买 nike

JSONSerialization.data(withJSONObject:options:)(在 Swift 2 中又称为 dataWithJSONObject)被声明为 throws。但是,传递无效对象会导致崩溃,而不是可捕获的错误:

do  {
// Crash
try JSONSerialization.data(
withJSONObject: NSObject(),
options: [])
}
catch
{
// Never reached
print("Caught error:", error)
}

那么为什么该方法被声明为“throws”呢?什么情况下会抛出异常?

不知道导致错误发生的原因会导致很难知道如何处理错误,并且无法编写验证该处理的测试。

最佳答案

原来是和this question一样的情况: 您可以创建一个包含无效 unicode(什么?!)的 Swift 字符串,这会导致异常。

let bogusStr = String(
bytes: [0xD8, 0x00] as [UInt8],
encoding: String.Encoding.utf16BigEndian)!

do {
let rawBody = try JSONSerialization.data(
withJSONObject: ["foo": bogusStr], options: [])
}
catch
{
// Exception lands us here
print("Caught error:", error)
}

为什么原始问题中的示例代码会崩溃,而不是同时抛出错误?

回复一个错误报告,苹果告诉我你应该调用 JSONSerialization.isValidJSONObject(_:) 之前 data(withJSONObject:) 如果你不知道确保该对象是可编码的,否则就是滥用 API,这就是为什么他们决定它应该崩溃而不是抛出一些可捕获的东西。

关于ios - 什么情况下JSONSerialization.data(withJSONObject :) throw a catchable error?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33584492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com