The following code used to work for Swift 5.2, and possibly Swift 5.3. (Last build was November 2020)
@propertyWrapper
class ActionBindable<Button> where Button : UIControl {
var target: Any? {
didSet { setTargetAction() }
}
weak var wrappedValue: Button! {
didSet { setTargetAction() }
}
private let action: Selector
private let event: UIControl.Event
init(action: Selector, event: UIControl.Event = .touchUpInside) {
self.action = action
self.event = event
}
private func setTargetAction() {
guard target != nil && wrappedValue != nil else { return }
wrappedValue.addTarget(target, action: action, for: event)
}
}
However, I'm getting an error now:
Property type 'UIKit.UIControl?' does not match 'wrappedValue' type 'UIKit.UIControl?'
Haven't been following property wrappers for some time, so I'm wondering what changed.
Here is the code where the property wrapper is being used:
@ActionBindable(action: #selector(addAction))
var addButton: UIControl!