2015-03-16 2 views
2

Как можно получить обработчик UIAlertAction в Swift. Он устанавливается при инициализации, однако я не нашел никакого свойства, чтобы справиться с закрытием действия. Закрытие типа (UIAlertAction) -> Void, однако я хотел бы получить содержимое закрытия, так что у меня есть закрытие, например, () -> Void. Это возможно? Спасибо за ваши ответыПолучить обработчик UIAlertAction в Swift

ответ

2

НЕТ член/свойство, открытое классом UIAlertAction. Однако мы можем управлять этим самим путем подклассификации UIAlertAction и иметь некоторого члена, названного, например, «actionHandler», чтобы сохранить это.

0

Я создал подкласс для этого, как следует:

/// 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 
}) 
Смежные вопросы