在Swift中获取UIAlertAction的处理程序

时间:2015-03-16 18:12:48

标签: swift uialertcontroller uialertaction

如何在Swift中获取UIAlertAction的处理程序。它在初始化时设置但是我没有找到任何属性来控制动作的关闭。闭包的类型为(UIAlertAction) -> Void但是我想获得闭包的内容,以便我有一些像() -> Void这样的闭包。这可能吗?谢谢你的回答

2 个答案:

答案 0 :(得分:2)

UIAlertAction类没有公开任何成员/属性。但是我们可以通过继承UIAlertAction自己来管理它,并让一些成员命名,比如说," actionHandler"存储它。

答案 1 :(得分:2)

我已经为此创建了一个子类:

/// An UIAlertAction which saves the handler. Can be used for unit testing the action callback.
final class UIExecutableAlertAction: UIAlertAction {

    private var handler: ((UIAlertAction) -> Swift.Void)?

    static func with(title: String?, style: UIAlertActionStyle, handler: ((UIAlertAction) -> Swift.Void)? = nil) -> UIExecutableAlertAction {
        let action = UIExecutableAlertAction(title: title, style: style, handler: handler)
        action.handler = handler
        return action
    }

    func execute() {
        handler?(self)
    }

}

可以这样使用:

let myAction = UIExecutableAlertAction.with(title: "title", style: .destructive, handler: { [weak self] _ in
    // Do something
})