首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Swift中传递空闭包的优雅方法

在Swift中传递空闭包的优雅方法
EN

Stack Overflow用户
提问于 2014-10-04 23:13:44
回答 2查看 19.8K关注 0票数 31

在Swift中,我经常需要将noop闭包传递给一个方法,以符合该方法的预期参数(arity)。在Obj的好日子里,人们可以将nil作为noop回调传递给它,然后就可以完成它了。在Swift中,有没有更快、更优雅的方法来做到这一点,而不需要像下面这样传递空块?

UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: { (UIAlertAction) -> Void in }) // do nothing in callback

完整示例:

代码语言:javascript
复制
import UIKit

class UIAlertControllerFactory {
    class func ok(title: String, message: String) -> UIAlertController {
        var alertController = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)
        var okAction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: { (UIAlertAction) -> Void in
        })
        alertController.addAction(okAction)
        return alertController
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-04 23:22:28

一般情况下,如果你不能通过nil

代码语言:javascript
复制
var okAction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default,
    handler:{ _ in })

在这种情况下,还可以传递nil,因为(从iOS 9.0开始)处理程序是Optional

代码语言:javascript
复制
var okAction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default,
    handler:nil)
票数 49
EN

Stack Overflow用户

发布于 2014-10-04 23:24:21

代码语言:javascript
复制
extension UIAlertAction {
    convenience init(title: String, style: UIAlertActionStyle) {
        return self.init(title: title, style: style, handler:  { (UIAlertAction) -> Void in })
    }
}

只需省略最后一个参数。你可以把它放到你的“工厂”里。

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

https://stackoverflow.com/questions/26194140

复制
相关文章

相似问题

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