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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (41)

在我的应用程序中,我有一个功能,它可以生成一个NSRURLSession,并使用以下方法发送一个NSURLRequest

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

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

func displayQRCode(receiveAddr, withAmountInBTC:amountBTC)

这就完成了UIImage添加计算。如果我试图在完成块中运行视图添加代码,Xcode会抛出一个错误,说明在后台进程中不能使用布局引擎。因此,我找到了一些代码,以便尝试在主线程上对方法排队:

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)
                        })

但是,我不知道如何在这个函数调用中添加参数“RecveAddr”和“archtBTC”。我将如何做到这一点?

提问于
用户回答回答于

把这个写进去completion handler.不需要使用dispatch_after

 dispatch_async(dispatch_get_main_queue(),{

    let delegateObj = UIApplication.sharedApplication().delegate as YourAppDelegateClass
    delegateObj.addUIImage("yourstring")

 })

SWIFT 3:

DispatchQueue.main.async { 
        let delegateObj = UIApplication.sharedApplication().delegate as YourAppDelegateClass
        delegateObj.addUIImage("yourstring")
}

也是为了在主队列上发送一个又一个

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

替换为YourAppDelegateClass为使用委托类

用户回答回答于

SWIFT 3版本:

DispatchQueue.main.async {
    print("Hello")
}

扫码关注云+社区