gpt4 book ai didi

ios - swift shouldPerformSegueWithIdentifier 异步获取数据

转载 作者:行者123 更新时间:2023-11-29 01:04:36 25 4
gpt4 key购买 nike

我正在制作一个非常基本的应用程序,它有一个搜索字段来获取传递给 tableview 的数据。

我想做的是运行一个异步任务来获取数据,如果数据成功获取,则转到下一个 View ,在加载期间屏幕不能卡住,这就是为什么需要异步部分的原因。

当用户按下搜索按钮时,我运行以下代码以获取我的数据

override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool {

方法。

    var valid  = true
let searchValue = searchField.text
let session = NSURLSession.sharedSession()

let url = NSURL(string: "https://someapi.com/search?query=" + searchValue!)



let task = session.dataTaskWithURL(url!, completionHandler: {(data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in
if let theData = data {
dispatch_async(dispatch_get_main_queue(), {
//for the example a print is enough, later this will be replaced with a json parser
print(NSString(data: theData, encoding: NSUTF8StringEncoding) as! String)

})
}
else
{
valid = false;
print("something went wrong");
}
})

UIApplication.sharedApplication().networkActivityIndicatorVisible = true
task.resume()
return valid;

我删除了一些检查连接/更改文本以显示应用正在加载数据的代码,从而使代码更具可读性。这是我遇到问题的部分,它是在所有检查之后出现的,我确定在这部分我有连接等。

发生的事情是它返回 true(我可以看到这一点,因为 View 已加载),但也会从 else 语句中记录“出现问题”。

我理解这是因为 return valid(在最后一行)在 valid 设置为 false 之前返回 valid。我如何才能仅在成功获取数据时返回 true(这会更改 View )并且在出现问题时不显示下一个 View ?

最佳答案

因为你希望数据获取是异步的所以你不能返回值,因为返回值是同步的(当前线程必须等到函数返回然后使用该值)。您想要的是使用回调。因此,当获取数据时,您可以执行操作。为此,您可以使用闭包,这样您的方法就是:

func shouldPerformSegue(identifier: String, sender: AnyObject?, completion:(success:Bool) -> ());

只需在 session.dataTaskWithURL block 中调用 completion(true)completion(false) 取决于它是否成功,并且当您调用您的函数时,您会为 completion 提供一个 block ,您可以在其中根据 success 参数执行转场或不转场。这意味着您不能覆盖该方法来执行您需要的操作,您必须实现自己的机制。

关于ios - swift shouldPerformSegueWithIdentifier 异步获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36556307/

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