如何快速使用完成块?

Posted

技术标签:

【中文标题】如何快速使用完成块?【英文标题】:How do I use a completionBlock in swift? 【发布时间】:2014-07-04 01:34:47 【问题描述】:

我正在尝试使用 swift 的 SKStoreProductViewController,但我的语法出现错误,特别是我的完成块。

这是我的代码:

let storeViewController:SKStoreProductViewController = SKStoreProductViewController();
storeViewController.delegate = self;

var productparameters = [SKStoreProductParameterITunesItemIdentifier:someitunesid];

storeViewController.loadProductWithParameters(productparameters,
    (success: Bool!, error: NSError!) -> Void in
        if success 
    self.presentViewController(storeViewController, animated: true, completion: nil);
         else 
        NSLog("%@", error)
    
  )

运行此程序后,error:NSError!),-> Void 之间出现 expected "," separator 错误

这对我来说没有意义,因为苹果文档要求:

func loadProductWithParameters(_ parameters: [NSObject : AnyObject]!,
           completionBlock block: ((Bool, NSError!) -> Void)!)

我做错了什么?

【问题讨论】:

【参考方案1】:

你已经完成了 99%,你只需要在你的块周围加上大括号就可以有正确的闭包语法:

storeViewController.loadProductWithParameters(productparameters,  (success: Bool!, error: NSError!) -> Void in
    if success 
        self.presentViewController(storeViewController, animated: true, completion: nil);
     else 
        NSLog("%@", error)
    
)

您可以阅读more about closures in Apple's documentation。

【讨论】:

以上是关于如何快速使用完成块?的主要内容,如果未能解决你的问题,请参考以下文章

RAID1 如何换硬盘

LabVIEW技巧代码块快速放置

如何快速使用异步函数?完成处理程序[重复]

php之快速入门学习-13(PHP 循环 - While 循环)

使用贝宝快速结帐完成付款后如何获取授权ID

hdfs 如何实现退役节点快速下线(也就是退役节点上的数据块快速迁移)