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

问题描述 投票:0回答:2

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

 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'

swift afnetworking
2个回答
1
投票

语法

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

期望没有参数的闭包。


使用语法

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

或者使用尾随闭包语法

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

并且不要忘记label参数。


0
投票

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

func doSomething ( _ str : String ) {}

这允许你像这个doSomething("text")一样调用这个函数

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

© www.soinside.com 2019 - 2024. All rights reserved.