传递闭包作为函数参数时出错

时间:2015-02-06 06:35:53

标签: ios iphone swift

我创建了一个全局函数,它正在关闭,因为它是参数之一。请参阅下面的代码,

func delayExecute(delay:Double, task:()->Void) {
    var queue: dispatch_queue_t
    queue =  dispatch_get_main_queue()
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC))), queue, { task()})
}

我从控制器的ViewDidLoad调用此函数。

override func viewDidLoad() {
    super.viewDidLoad()
    progressHud = MBProgressHUD.showHUDAddedTo(self.view, animated: true)

    delayExecute(2.0, {
        self.progressHud?.hide(true)
    })
}

viewDidLoad的重要部分是调用delayExecute函数。它给了我一个错误:error: cannot invoke 'hide' with an argument list of type '(FloatLiteralConvertible, () -> () -> $T2)'

从下面的实验或试验和错误中我得出结论,这是一个单行闭包,因此,编译器隐式返回self.progressHud?.hide(true)的值,这是" void"它正在创造问题。

我想知道以下事情,

  • 调用代码段有什么问题?
  • 纠正它的正确方法是什么?

尝试了以下事项并且这些事情正在发挥但不知道为什么

delayExecute1(2.0, {
        println("")
        self.progressHud?.hide(true)
    })

仅在该闭包中添加了println语句。

 delayExecute1(2.0, {
        println(self.progressHud?.hide(true))
    })

println

中捕获整个陈述
delayExecute(2.0, {
        self.progressHud!.hide(true)
    })

使用!(强制解包)而不是?(可选链接)

0 个答案:

没有答案