首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Swift中,如何在GCD主线程上调用带参数的方法?

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

Stack Overflow用户
提问于 2014-07-28 05:12:48
回答 8查看 181.1K关注 0票数 203

在我的应用程序中,我有一个函数可以生成NSRURLSession并使用以下命令发送NSURLRequest

代码语言:javascript
复制
sesh.dataTaskWithRequest(req, completionHandler: {(data, response, error)

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

代码语言:javascript
复制
func displayQRCode(receiveAddr, withAmountInBTC:amountBTC)

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

代码语言:javascript
复制
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”添加到此函数调用中。我该如何做到这一点,或者有人能建议一种最佳的方法来将方法调用添加到应用程序的主队列中?

EN

回答 8

Stack Overflow用户

发布于 2016-06-16 18:34:13

Swift 3+和Swift 4版本:

代码语言:javascript
复制
DispatchQueue.main.async {
    print("Hello")
}

Swift 3和Xcode 9.2:

代码语言:javascript
复制
dispatch_async_on_main_queue {
    print("Hello")
}
票数 85
EN

Stack Overflow用户

发布于 2018-09-10 19:21:58

在主线程上重新加载collectionView

代码语言:javascript
复制
DispatchQueue.main.async {
    self.collectionView.reloadData()
}
票数 8
EN

Stack Overflow用户

发布于 2016-04-10 05:12:50

以下是更好的(IMO) Swifty/Cocoa样式语法,以实现与其他答案相同的结果:

代码语言:javascript
复制
NSOperationQueue.mainQueue().addOperationWithBlock({
    // Your code here
})

或者你可以用更少的代码和更多的功能抓取流行的Async Swift library

代码语言:javascript
复制
Async.main {
    // Your code here
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24985716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档