This commit is contained in:
Михаил Капелько
2023-12-26 12:21:01 +03:00
parent 880c4f3dee
commit 5617da4d79
2 changed files with 39 additions and 32 deletions

View File

@@ -18,8 +18,10 @@ class AppDelegate: UIResponder, UIApplicationDelegate
window?.makeKeyAndVisible() window?.makeKeyAndVisible()
Bus.processSyncG( Bus.process(
MeetupId.shouldFormat, MeetupId.K.meetupIdTextUI.rawValue, MeetupId.K.meetupIdTextApp.rawValue MeetupId.K.meetupIdTextUI.rawValue,
MeetupId.K.meetupIdTextApp.rawValue,
MeetupId.shouldFormat
) )
return true return true

View File

@@ -22,6 +22,20 @@ extension Bus {
} }
} }
private extension Bus {
static func subscribe(
_ subscription: AnyCancellable?,
_ sub: UnsafeMutablePointer<[AnyCancellable]>?
) {
guard let subscription else { return }
if let sub = sub {
sub.pointee.append(subscription)
} else {
Service.singleton.subscriptions.append(subscription)
}
}
}
public extension Bus { public extension Bus {
static func receive<T>( static func receive<T>(
_ keys: Set<String>, _ keys: Set<String>,
@@ -80,41 +94,32 @@ public extension Bus {
} }
} }
private extension Bus {
static func subscribe(
_ subscription: AnyCancellable?,
_ sub: UnsafeMutablePointer<[AnyCancellable]>?
) {
guard let subscription else { return }
if let sub = sub {
sub.pointee.append(subscription)
} else {
Service.singleton.subscriptions.append(subscription)
}
}
}
public extension Bus { public extension Bus {
static func processSync<Src, Dst>( static func process<Src, Dst>(
_ subscriptions: inout [AnyCancellable],
_ handler: @escaping ((Src) -> Dst?),
_ keyIn: String, _ keyIn: String,
_ keyOut: String _ keyOut: String,
_ handler: @escaping ((Src) -> Dst?),
opt: [Option] = [],
sub: UnsafeMutablePointer<[AnyCancellable]>? = nil
) { ) {
Service.singleton.events var subscription: AnyCancellable?
.compactMap { processKeyValue($0, keyIn, handler) } let isAsync = opt.contains(.async)
.sink { vOut in Service.singleton.send(keyOut, vOut) }
.store(in: &subscriptions)
}
static func processSyncG<Src, Dst>( // Async.
_ handler: @escaping ((Src) -> Dst?), if isAsync {
_ keyIn: String, subscription = Service.singleton.events
_ keyOut: String .compactMap { processKeyValue($0, keyIn, handler) }
) { .receive(on: DispatchQueue.main)
Service.singleton.events .sink { vOut in Service.singleton.send(keyOut, vOut) }
}
// Sync.
if !isAsync {
subscription = Service.singleton.events
.compactMap { processKeyValue($0, keyIn, handler) } .compactMap { processKeyValue($0, keyIn, handler) }
.sink { vOut in Service.singleton.send(keyOut, vOut) } .sink { vOut in Service.singleton.send(keyOut, vOut) }
.store(in: &Service.singleton.subscriptions) }
subscribe(subscription, sub)
} }
} }