将可选的回调传递给Swift函数 [英] Passing optional callback into Swift function

查看:121
本文介绍了将可选的回调传递给Swift函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在学习Swift lang,但是我无法将可选的回调参数传递给函数:

  func dismiss(completion: ) - > Void){
if(completion){
return self.dismissViewControllerAnimated(true,completion:completion)
}
self.dismissModalViewControllerAnimated(true)
}

这给我一个错误 - Type() - >无效符合协议'LogicValue'



有什么建议?

解决方案

更新Swift 3/4:



可选不再是布尔表达式,
弃用 func dismissModalViewControllerAnimated(animated:Bool)
在Swift中不再可用。



简单地将完成参数声明为可选闭包,并且
将它传递给


  func dismiss(animated flag:Bool ,完成:(() - > Void)?= nil)

well:

  func dismiss(completion:(() - > Void)?= nil){
self。 dismiss(animated:true,completion:completion)
}






Old(Swift 1.x?)答案:



声明完成参数为(隐式解包)可选 c losure (() - > () - > Void)!

  func dismiss {
if(completion){
return self.dismissViewControllerAnimated(true,completion:completion)
}
self.dismissModalViewControllerAnimated(true)
}

但请注意,您可以调用

  self.dismissViewControllerAnimated(true,completion:completion)

无论如何,因为<该函数的code> completion 参数也是可选的。


  func dismissModalViewControllerAnimated(animated:Bool)

实际上标记为弃用。

I'm learning Swift lang, but I cannot pass optional callback argument into function:

func dismiss(completion: () -> Void) {
    if (completion) {
        return self.dismissViewControllerAnimated(true, completion: completion)
    }
    self.dismissModalViewControllerAnimated(true)
}

This shows me an error - Type () -> Void does not conform to protocol 'LogicValue'

Any suggestions?

解决方案

Update for Swift 3/4:

An optional is no longer a boolean expression, and the deprecated func dismissModalViewControllerAnimated(animated: Bool) is no longer available in Swift.

Simply declare the completion parameter as an optional closure, and pass it on to

func dismiss(animated flag: Bool, completion: (() -> Void)? = nil)

which takes an optional closure as well:

func dismiss(completion: (() -> Void)? = nil) {
    self.dismiss(animated: true, completion: completion)
}


Old (Swift 1.x?) answer:

Declare the completion parameter as (implicitly unwrapped) optional closure (() -> Void)!:

func dismiss(completion: (() -> Void)!) {
    if (completion) {
        return self.dismissViewControllerAnimated(true, completion: completion)
    }
    self.dismissModalViewControllerAnimated(true)
}

But note that you can call

self.dismissViewControllerAnimated(true, completion: completion)

in any case, because the completion parameter of that function is optional as well. And

func dismissModalViewControllerAnimated(animated: Bool)

is actually marked as deprecated.

这篇关于将可选的回调传递给Swift函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆