import Combine import Foundation enum MeetupId { enum Keys: String, RawRepresentable { case meetupIdTextApp case meetupIdTextUI } static func shouldFormat(_ s: String) -> String? { s.components(separatedBy: NSCharacterSet.decimalDigits.inverted).reduce("") { $0 + $1 } } final class MeetupIdFormatter { var subscriptions = Set<AnyCancellable>() deinit { /**/print("ИГР MeetupIF.DEinit") } init() { Bus.receive( &subscriptions, [Keys.meetupIdTextUI.rawValue], { [weak self] k, v in self?.handleFormatting(k, v) } ) /**/print("ИГР MeetupIF.init") } func handleFormatting(_: String, _ value: String) { let out = MeetupId.shouldFormat(value) /**/print("ИГР MeetupIF.handleF out/dt: '\(out)'/'\(Date())'") Bus.Service.singleton?.send(Keys.meetupIdTextApp.rawValue, out) } } /* struct V: View { /*@StateObject*/ var fmt = MeetupIdFormatter() @StateObject var txt = Bus.BindingPipe("", Keys.meetupIdTextApp.rawValue, Keys.meetupIdTextUI.rawValue) var body: some View { VStack { Text("Hi, the text is: '\(txt.value)'") .fontWeight(.bold) TextField("Placeholder", text: $txt.value) .padding(8) .border(Color.blue, width: 2) } .frame(width: 320) .padding() } } */ }