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()
Bus.processSyncG(
MeetupId.shouldFormat, MeetupId.K.meetupIdTextUI.rawValue, MeetupId.K.meetupIdTextApp.rawValue
Bus.process(
MeetupId.K.meetupIdTextUI.rawValue,
MeetupId.K.meetupIdTextApp.rawValue,
MeetupId.shouldFormat
)
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 {
static func receive<T>(
_ 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 {
static func processSync<Src, Dst>(
_ subscriptions: inout [AnyCancellable],
_ handler: @escaping ((Src) -> Dst?),
static func process<Src, Dst>(
_ keyIn: String,
_ keyOut: String
_ keyOut: String,
_ handler: @escaping ((Src) -> Dst?),
opt: [Option] = [],
sub: UnsafeMutablePointer<[AnyCancellable]>? = nil
) {
Service.singleton.events
.compactMap { processKeyValue($0, keyIn, handler) }
.sink { vOut in Service.singleton.send(keyOut, vOut) }
.store(in: &subscriptions)
}
var subscription: AnyCancellable?
let isAsync = opt.contains(.async)
static func processSyncG<Src, Dst>(
_ handler: @escaping ((Src) -> Dst?),
_ keyIn: String,
_ keyOut: String
) {
Service.singleton.events
// Async.
if isAsync {
subscription = Service.singleton.events
.compactMap { processKeyValue($0, keyIn, handler) }
.receive(on: DispatchQueue.main)
.sink { vOut in Service.singleton.send(keyOut, vOut) }
}
// Sync.
if !isAsync {
subscription = Service.singleton.events
.compactMap { processKeyValue($0, keyIn, handler) }
.sink { vOut in Service.singleton.send(keyOut, vOut) }
.store(in: &Service.singleton.subscriptions)
}
subscribe(subscription, sub)
}
}