0
爲了使用封閉的說法UIBarButtonItem
我使用一個子類:使用封閉,而不是選擇論據的UIBarButtonItem,但沒有使用弱自我
class ActionBarButtonItem: UIBarButtonItem {
private var actionHandler: (() -> Void)?
convenience init(title: String?, style: UIBarButtonItemStyle, actionHandler: (() -> Void)?) {
self.init(title: title, style: style, target: nil, action: #selector(barButtonItemPressed))
self.target = self
self.actionHandler = actionHandler
}
convenience init(image: UIImage?, style: UIBarButtonItemStyle, actionHandler: (() -> Void)?) {
self.init(image: image, style: style, target: nil, action: #selector(barButtonItemPressed))
self.target = self
self.actionHandler = actionHandler
}
@objc func barButtonItemPressed(sender: UIBarButtonItem) {
actionHandler?()
}
}
,但現在我需要弱[weak self]
:
self.add(barButton: .menu, position: .left) { [weak self] in
guard let strongSelf = self else {return}
strongSelf.openMenu()
}
有沒有辦法仍然使用閉包作爲選擇器,但不保存閉包,以避免在任何地方使用弱自我,你可能會忘記它的地方?
如果你沒有保存閉包,那麼當按下按鈕後怎麼才能執行呢? –
只是一個旁註:你所謂的weakSelf在後衛讓實際上是一個強大的自己已經:) –
@MartinR所以沒有辦法使用閉包,而不使用弱自我這個怎麼樣https://stackoverflow.com/a/44037534/1836115 – iOSGeek