Um Schließung im Argument von UIBarButtonItem
verwende ich eine Unterklasse bin mit:Verwendung Verschluss statt Selektor Argument für UIBarButtonItem aber ohne schwache Selbst mit
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?()
}
}
aber jetzt brauche ich zu schwach [weak self]
:
self.add(barButton: .menu, position: .left) { [weak self] in
guard let strongSelf = self else {return}
strongSelf.openMenu()
}
Gibt es eine Möglichkeit, die Schließung noch als Selektor zu verwenden, aber nicht die Schließung zu speichern, um zu vermeiden, dass du überall schwaches Selbst verwendest und du es irgendwo vergessen kannst?
Wenn Sie die Schließung nicht speichern, wie kann sie später ausgeführt werden, wenn die Taste gedrückt wird? –
Nur eine Nebenbemerkung: Was Sie in der Wache schwachSelf nennen, ist eigentlich ein starkes Selbst schon :) –
@MartinR also keine Möglichkeit, Schließung zu verwenden, ohne schwaches Selbst zu verwenden, was ist mit diesem https://Stackoverflow.com/a/44037534/1836115 – iOSGeek