首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在swift中创建一个可选的闭包?

如何在swift中创建一个可选的闭包?
EN

Stack Overflow用户
提问于 2014-06-25 04:39:51
回答 4查看 33.1K关注 0票数 98

我试图在Swift中声明一个带可选闭包的参数。我声明的函数如下所示:

代码语言:javascript
复制
class Promise {

 func then(onFulfilled: ()->(), onReject: ()->()?){       
    if let callableRjector = onReject {
      // do stuff! 
    }
 }

}

但Swift抱怨“条件中的绑定值必须是可选类型”,其中声明了"if let“。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-06-25 04:46:00

您应该将可选的闭包放在括号中。这将正确地确定?操作符的作用域。

代码语言:javascript
复制
func then(onFulfilled: ()->(), onReject: (()->())?){       
    if let callableRjector = onReject {
      // do stuff! 
    }
 }
票数 122
EN

Stack Overflow用户

发布于 2014-07-27 13:03:58

为了使代码更简短,我们可以使用nil作为onReject参数的默认值,并在调用它时使用可选的链接?()

代码语言:javascript
复制
func then(onFulfilled: ()->(), onReject: (()->())? = nil) {
  onReject?()
}

这样,当我们调用then函数时,就可以省略onReject参数。

代码语言:javascript
复制
then({ /* on fulfilled */ })

我们还可以使用尾部闭包语法将onReject参数传递给then函数:

代码语言:javascript
复制
then({ /* on fulfilled */ }) {
  // ... on reject
}

这里有一个关于它的blog post

票数 68
EN

Stack Overflow用户

发布于 2014-10-09 17:14:55

因为我假设这个“可选的”闭包应该什么也不做,所以您可以使用一个带有空闭包的参数作为默认值:

代码语言:javascript
复制
func then(onFulfilled: ()->(), onReject: ()->() = {}){       
    // now you can call your closures
    onFulfilled()
    onReject()
}

现在可以使用或不使用onReject回调来调用此函数

代码语言:javascript
复制
then({ ... })
then({ ... }, onReject: { ... })

这里不需要斯威夫特很棒的Optionals?

票数 36
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24395853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档