小编典典

在 Swift 中,如何在 GCD 主线程上调用带参数的方法?

all

在我的应用程序中,我有一个创建 NSRURLSession 并使用发送 NSURLRequest 的函数

sesh.dataTaskWithRequest(req, completionHandler: {(data, response, error)

在此任务的完成块中,我需要进行一些计算,将 UIImage 添加到调用视图控制器。我有一个函数叫做

func displayQRCode(receiveAddr, withAmountInBTC:amountBTC)

进行 UIImage 添加计算。如果我尝试在完成块内运行视图添加代码,Xcode 会抛出一个错误,提示我在后台进程中无法使用布局引擎。所以我在 SO
上找到了一些代码,它试图在主线程上排队一个方法:

let time = dispatch_time(DISPATCH_TIME_NOW, Int64(0.0 * Double(NSEC_PER_MSEC)))

dispatch_after(time, dispatch_get_main_queue(), {
    let returned = UIApplication.sharedApplication().sendAction("displayQRCode:", to: self.delegate, from: self, forEvent: nil)
})

但是,我不知道如何将参数“receiveAddr”和“amountBTC”添加到这个函数调用中。我将如何做到这一点,或者有人可以建议一种将方法调用添加到应用程序主队列的最佳方法?


阅读 80

收藏
2022-06-29

共1个答案

小编典典

现代版本的 Swift 用于DispatchQueue.main.async调度到主线程:

DispatchQueue.main.async { 
  // your code here
}

要在主队列上 调度之后,请使用:

DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
  // your code here
}

旧版本的 Swift 使用:

dispatch_async(dispatch_get_main_queue(), {
  let delegateObj = UIApplication.sharedApplication().delegate as YourAppDelegateClass
  delegateObj.addUIImage("yourstring")
})
2022-06-29