-
-
Save anatoliykant/38e751c3ddef4f2ba3b1fe1abbea4bfa to your computer and use it in GitHub Desktop.
SwiftUI Binding wrappers for willSet and didSet
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
extension Binding { | |
/// Wrapper to listen to didSet of Binding | |
func didSet(_ didSet: @escaping ((newValue: Value, oldValue: Value)) -> Void) -> Binding<Value> { | |
return .init(get: { self.wrappedValue }, set: { newValue in | |
let oldValue = self.wrappedValue | |
self.wrappedValue = newValue | |
didSet((newValue, oldValue)) | |
}) | |
} | |
/// Wrapper to listen to willSet of Binding | |
func willSet(_ willSet: @escaping ((newValue: Value, oldValue: Value)) -> Void) -> Binding<Value> { | |
return .init(get: { self.wrappedValue }, set: { newValue in | |
willSet((newValue, self.wrappedValue)) | |
self.wrappedValue = newValue | |
}) | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
struct FilterView: View { | |
@Binding var filters: [String] | |
@Binding var selectedFilters: Set<String> | |
var body: some View { | |
List(filters, id: \.self, selection: $selectedFilters.didSet { | |
print("Selection changed from \($1) to \($0)") | |
}, rowContent: { filter in | |
Text(filter) | |
}) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment