Multithreading 如何强制及时返回swift 3
我是swift语言的新手。我想问的是,为什么return在函数体之前起作用?例如: 如果我有一个函数Multithreading 如何强制及时返回swift 3,multithreading,swift3,return,Multithreading,Swift3,Return,我是swift语言的新手。我想问的是,为什么return在函数体之前起作用?例如: 如果我有一个函数 func somefunc(completion: @escaping ([String]){ let something = ["One", "Two", "Three", "Four", "Five"] completion(something) } func appending() -> Int { var somestring = [String]() somefu
func somefunc(completion: @escaping ([String]){
let something = ["One", "Two", "Three", "Four", "Five"]
completion(something)
}
func appending() -> Int {
var somestring = [String]()
somefunc { (result) in
for i in 0..<result.count{
somestring.append(result[i])
}
}
return somestring.count
}
func somefunc(完成:@escaping([String]){
让某物=[“一”、“二”、“三”、“四”、“五”]
完成(某事)
}
func appending()->Int{
var somestring=[String]()
somefunc{(结果)在
对于0中的i..好的,让我们把你的somefunc
方法放在一边,我们可以从@escaping
的存在中推断出,它试图异步地做一些事情。显然,在你试图简化问题的过程中,你已经将它转换成了非异步的东西。但是,让我们假设它确实在调用它的完成处理程序clos在主线程上异步(即稍后)执行ure。然后可以执行以下操作:
var stringsForTable = [String]()
func appending() {
somefunc { results in
self.stringsForTable.append(contentsOf: results)
self.tableView.reloadData()
}
}
请注意,追加
不会返回任何内容,因为您无法从异步函数返回数据(因为异步函数直到稍后才调用其完成处理程序闭包,直到追加
完成之后很久)但是,追加
所能做的就是在调用完成处理程序时触发重新加载UI所需的任何操作
这只是一个假设的例子,但它说明了模式。我们必须看看somefunc
实际在做什么来进一步提供建议。感谢您的编辑,但是func somefunc(完成:@escaping([String]){…}仍然毫无意义。self中的self.somestring中的insideappending中的let
也没有意义。感谢您的回答,让我解释一下我为什么要问这个问题。我使用的是json,我必须获取从服务器收到的值或结果返回后的en应该有效。但是返回在值从服务器返回之前有效,并且我的单元格变为空。很好,但您必须给我们一个可复制的示例,但这不是。更有可能的是,您的带有@escaping
闭包的方法实际上是在执行异步操作(您的示例不是).让我们暂时忽略您的示例,并将重点放在具有真正异步@escaping
闭包的方法上,底线是您不能只计划“返回”结果马上就出来了。@escaping
背后的整个想法是,当函数发生得太慢时,你会有意识地说“这将在稍后调用”,在这个函数返回之后。好的,我理解你的想法)但是如何说“嘿‘返回’,请在我的数据填充(somestring)时再使用它,然后在这项工作之后”-在这个例子中?哦,谢谢你)我要做的就是重新加载数据:D.再次感谢你)