faible Pour utiliser la fermeture dans l'argumentation de UIBarButtonItem
J'utilise une sous-classe:Utiliser fermeture argument sélecteur place pour UIBarButtonItem mais sans utiliser l'auto
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?()
}
}
mais maintenant je dois faible [weak self]
:
self.add(barButton: .menu, position: .left) { [weak self] in
guard let strongSelf = self else {return}
strongSelf.openMenu()
}
Y at-il un moyen d'utiliser encore la fermeture comme sélecteur, mais ne pas enregistrer la fermeture pour éviter d'utiliser soi faible partout et vous pouvez l'oublier quelque part?
Si vous ne sauvegardez pas la fermeture, comment peut-elle être exécutée plus tard, lorsque le bouton est enfoncé? –
Juste un sidenote: ce que vous appelez weakSelf dans le garde let est en fait un moi fort déjà :) –
@MartinR donc pas moyen d'utiliser la fermeture sans utiliser de soi faible que sur ce https://stackoverflow.com/a/44037534/1836115 – iOSGeek