Multithreading 如何强制及时返回swift 3

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

我是swift语言的新手。我想问的是,为什么return在函数体之前起作用?例如: 如果我有一个函数

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中的
inside
appending
中的
let
也没有意义。感谢您的回答,让我解释一下我为什么要问这个问题。我使用的是json,我必须获取从服务器收到的值或结果返回后的en应该有效。但是返回在值从服务器返回之前有效,并且我的单元格变为空。很好,但您必须给我们一个可复制的示例,但这不是。更有可能的是,您的带有
@escaping
闭包的方法实际上是在执行异步操作(您的示例不是).让我们暂时忽略您的示例,并将重点放在具有真正异步
@escaping
闭包的方法上,底线是您不能只计划“返回”结果马上就出来了。
@escaping
背后的整个想法是,当函数发生得太慢时,你会有意识地说“这将在稍后调用”,在这个函数返回之后。好的,我理解你的想法)但是如何说“嘿‘返回’,请在我的数据填充(somestring)时再使用它,然后在这项工作之后”-在这个例子中?哦,谢谢你)我要做的就是重新加载数据:D.再次感谢你)