gpt4 book ai didi

ios - 闭包内的 try-catch -> 从抛出函数类型到非抛出函数类型的无效转换

转载 作者:行者123 更新时间:2023-11-30 12:20:35 26 4
gpt4 key购买 nike

我已经用 throws 标记了我的函数,为什么 swift 强制我使用 do-try-catch block ?

我想处理在下面调用此函数时抛出的任何类型的错误。

static func getPosts() throws {

let url = URL(string: "https://jsonplaceholder.typicode.com/posts/1")
let request = URLRequest(url: url!)

let session = URLSession.shared
session.dataTask(with: request) { (data, response, error) in

let json = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableLeaves) as! [String: Any]

}.resume()
}

下面是我收到的错误的屏幕截图。

最佳答案

您的throws表示您的getPosts()函数本身将抛出异常。不过,它是在调用闭包之前完成的,这意味着即使 json 解析抛出异常,你也已经过了可以捕获并处理异常的时间。

闭包内的错误必须在闭包中处理。您正在寻找类似的东西

static func getPosts(completion: @escaping (_ error: String) -> Void) {

let url = URL(string: "https://jsonplaceholder.typicode.com/posts/1")
let request = URLRequest(url: url!)

let session = URLSession.shared
session.dataTask(with: request) { (data, response, error) in
do {
let json = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableLeaves) as! [String: Any]
completion("ok")
}catch let error {
print(error)
completion("error")
}

}.resume()
}

关于ios - 闭包内的 try-catch -> 从抛出函数类型到非抛出函数类型的无效转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44840530/

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