无法使用“(execute: ())”类型的参数列表调用 'async'

Cannot invoke 'async' with an argument list of type '(execute: ())'

我正在尝试进行网络调用,然后更新主线程,但似乎在后台线程中创建的任何变量都无法作为参数发送到主线程:

 let task = session.dataTask(with: request as URLRequest,
                                completionHandler: {
                                    (data, response, error) in
                                    guard let _:Data=data, let _:URLResponse = response, error == nil else {


                                        return
                                    }

                                    let json = try? JSONSerialization.jsonObject(with: data!, options: [])


    var car = "hello"
    DispatchQueue.main.async (execute: self.someFunc(car)) <-- wont accept car parameter

    })

    task.resume()

这是签名:

func someFunc( str:String) {

}

出现以下错误: 无法使用类型为“(execute: ())”

的参数列表调用 'async'

语法

DispatchQueue.main.async(execute: () -> Void)

需要一个没有参数的闭包。


使用语法

DispatchQueue.main.async(execute: { someFunc(str: car) })

或使用尾随闭包语法

DispatchQueue.main.async {
    self.someFunc(str: car)
}

并且不要忘记标签参数。

您可以通过在函数名称前使用 _ 从您的函数中删除标签。一个例子:

func doSomething ( _ str : String ) {}

This allows you to call the function like this doSomething("text")

如果不使用下划线,调用函数时必须说doSomething(str : "")