2016-03-08 47 views
-1

我有一个巨大而耗时的例程(calculatePower)需要一个完成处理程序,以便它同步运行。该请求的触发器是一个UIButton。这就是所谓的:Swift完成处理程序调用语法

func application(application: UIApplication!, performFetchWithCompletionHandler completionHandler: ((UIBackgroundFetchResult) -> Void)!) { 
    calculatePower() { 
     completionHandler(UIBackgroundFetchResult.NewData) 
     } 
} 

在calcualtePower完成处理的重要位读作:

func calculatePower(completionHandler: (() -> Void)!) { 
    completionHandler() 
} 

有我得到这个权利,如果是的话,我称应用程序()?

application() 

是不是。

回答

1

performFetchWithCompletionHandler不是你所说的。如果您已配置后台下载,则运行时会调用它。你的情况似乎与后台下载没有任何关系(是吗?),所以我会说你完全错误地吠叫了错误的树。如果您想要将耗时的计算转移到后台,您需要了解GCD和后台队列(即dispatch_async)。之后您将很容易回到主线程(另一个dispatch_async)。

+0

,看到我的在线图书:http://www.apeth.com/iOSBook/ch38.html#_grand_central_dispatch – matt

+0

我的工作我的方式通过 - 许多感谢。 –

0

解读为,非常感谢马特。

@IBAction func buttonCalculatePower(sender: AnyObject) { 
    self.calculateButton.setTitle("Calculating", forState: .Normal) 
    self.calculateButton.backgroundColor = UIColor.lightGrayColor() 
    self.calculateButton.enabled = false 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { 
      self.calculatePower() 
      dispatch_async(dispatch_get_main_queue()) { 
       self.calculateButton.backgroundColor = UIColor.orangeColor() 
       self.calculateButton.setTitle("Start", forState: .Normal) 
       self.calculateButton.enabled = true 
     } 
    } 
} 
相关问题