无法使用“(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 : "")
我正在尝试进行网络调用,然后更新主线程,但似乎在后台线程中创建的任何变量都无法作为参数发送到主线程:
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 : "")