gpt4 book ai didi

swift - 当dispatch_async(dispatch_get_main_queue())运行时如何从类方法发送信息

转载 作者:行者123 更新时间:2023-11-30 14:08:41 25 4
gpt4 key购买 nike

我有一个 ViewController,点击按钮后我想从网络获取数据。

let myClass = Class()
myClass.myMethod() {
dispatch_async(dispatch_get_main_queue()) {
}
}

在我的类文件中我有一个方法

func myMethod( completion:()->() ) {  
if let connectToInternetAndGetDataFromWeb
completion()
} else {
print("Cold not construct a valid URL")
completion()
}
}

我的类(class)是连接到互联网并获取数据

func downloadJSONFromURL() {
if let httpResponse {
switch(httpResponse.statusCode) {
case 200:
// 2. Create JSON Object with data
do {
try
} catch {
print(error)
}
}
} else {
print("Error: Not a valid HTTP response")
}
dataTask!.resume()
}

我的问题是如何将反馈发送到 ViewController 以显示来自类的警报信息。如果我有互联网连接就可以,但例如当我提供错误的网址时,我会出现错误 print("Error: Not a valid HTTP response") 但我如何将此错误发送到 ViewController ?

最佳答案

有多种方法可以做到这一点。我认为您的情况最简单的部分是在 downloadJSONFromURL() 中添加一个闭包参数。

func downloadJSONFromURL(completion:((error:NSError?)->Void)) {
if let httpResponse {
switch(httpResponse.statusCode) {
case 200:
// 2. Create JSON Object with data
do {
try
completion(nil)
} catch {
print(error)
completion(error)
}
}
} else {
print("Error: Not a valid HTTP response")
}
dataTask!.resume()
}

当然,您必须将完成闭包链接到发出请求的 UIViewController 。因此,myMethod还在它的闭包中获取一个可选的错误参数,等等。最后你有像这样的 UIViewController 类

let myClass = Class()
myClass.myMethod() {(error:NSError?) -> Void in
dispatch_async(dispatch_get_main_queue()) {
//Show Alert or whatever is necessary for the error
}
}

关于swift - 当dispatch_async(dispatch_get_main_queue())运行时如何从类方法发送信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32020312/

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