11import AppKit
22import SwiftUI
33
4+ typealias KeyChangedFn = ( ( _ before: String ? , _ value: String ? ) -> Void )
5+
46struct KeyButton : View {
57 @Binding var text : String
68 let placeholder : String
79 @State private var isListening = false
810 @State private var oldValue = " "
911 var validationError : ValidationErrorType ? = nil
10- var onKeyChanged : ( ( ) -> Void ) ? = nil
12+ var onKeyChanged : KeyChangedFn ? = nil
1113
1214 var body : some View {
1315 Button ( action: {
@@ -57,7 +59,7 @@ struct KeyListenerView: NSViewRepresentable {
5759 @Binding var isListening : Bool
5860 @Binding var text : String
5961 @Binding var oldValue : String
60- var onKeyChanged : ( ( ) -> Void ) ?
62+ var onKeyChanged : KeyChangedFn ?
6163
6264 func makeNSView( context: Context ) -> NSView {
6365 let view = KeyListenerNSView ( )
@@ -87,7 +89,7 @@ struct KeyListenerView: NSViewRepresentable {
8789 var isListening : Binding < Bool > ?
8890 var text : Binding < String > ?
8991 var oldValue : Binding < String > ?
90- var onKeyChanged : ( ( ) -> Void ) ?
92+ var onKeyChanged : KeyChangedFn ?
9193
9294 override var acceptsFirstResponder : Bool { true }
9395
@@ -126,15 +128,15 @@ struct KeyListenerView: NSViewRepresentable {
126128
127129 DispatchQueue . main. async {
128130 isListening. wrappedValue = false
129- self . onKeyChanged ? ( )
131+ self . onKeyChanged ? ( self . oldValue ? . wrappedValue , self . text ? . wrappedValue )
130132 }
131133 }
132134
133135 override func resignFirstResponder( ) -> Bool {
134136 if let isListening = isListening, isListening. wrappedValue {
135137 DispatchQueue . main. async {
136138 isListening. wrappedValue = false
137- self . onKeyChanged ? ( )
139+ self . onKeyChanged ? ( self . oldValue ? . wrappedValue , self . text ? . wrappedValue )
138140 }
139141 }
140142 return super. resignFirstResponder ( )
@@ -151,26 +153,22 @@ struct KeyListenerView: NSViewRepresentable {
151153 VStack ( spacing: 20 ) {
152154 KeyButton (
153155 text: $text,
154- placeholder: " Key " ,
155- onKeyChanged: { print ( " Key changed " ) }
156+ placeholder: " Key "
156157 )
157158 KeyButton (
158159 text: $text,
159160 placeholder: " Key " ,
160- validationError: . duplicateKey,
161- onKeyChanged: { print ( " Key changed " ) }
161+ validationError: . duplicateKey
162162 )
163163 KeyButton (
164164 text: $text,
165165 placeholder: " Key " ,
166- validationError: . emptyKey,
167- onKeyChanged: { print ( " Key changed " ) }
166+ validationError: . emptyKey
168167 )
169168 KeyButton (
170169 text: $text,
171170 placeholder: " Key " ,
172- validationError: . nonSingleCharacterKey,
173- onKeyChanged: { print ( " Key changed " ) }
171+ validationError: . nonSingleCharacterKey
174172 )
175173 Text ( " Current value: ' \( text) ' " )
176174 }
0 commit comments