d
This commit is contained in:
@@ -8,9 +8,6 @@ public extension Bus {
|
||||
key == v.key,
|
||||
let value = v.value as? T
|
||||
else {
|
||||
if key == "MeetupId.finishLoading" {
|
||||
/**/print("ИГР Bus.convertKV failed k/v/T: '\(key)'/'\(v)'/'\(type(of: T.self))'")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
return (key, value)
|
||||
@@ -20,7 +20,6 @@ extension Bus {
|
||||
var subscriptions = [AnyCancellable]()
|
||||
|
||||
func send(_ key: String, _ value: Any) {
|
||||
/**/print("ИГР BusS.send key/value: '\(key)'/'\(value)'")
|
||||
events.send((key, value))
|
||||
}
|
||||
}
|
||||
9
Modules/BusX/BusUI/src/BusUI.Aux.swift
Normal file
9
Modules/BusX/BusUI/src/BusUI.Aux.swift
Normal file
@@ -0,0 +1,9 @@
|
||||
extension BusUI {
|
||||
/// Пропускаем лишь значения от UI
|
||||
///
|
||||
/// - Returns: Значение без префиксов "a:"/"u:"
|
||||
static func onlyUIText(_ s: String) -> String? {
|
||||
guard s.hasPrefix("u:") else { return nil }
|
||||
return String(s.dropFirst(2))
|
||||
}
|
||||
}
|
||||
16
Modules/BusX/BusUI/src/BusUI.Button.swift
Normal file
16
Modules/BusX/BusUI/src/BusUI.Button.swift
Normal file
@@ -0,0 +1,16 @@
|
||||
import Combine
|
||||
|
||||
extension BusUI {
|
||||
public final class Button: ObservableObject {
|
||||
public let v = PassthroughSubject<Void, Never>()
|
||||
var subscriptions = [AnyCancellable]()
|
||||
|
||||
public init(_ key: String) {
|
||||
Bus.send(
|
||||
key,
|
||||
v.map { true }.eraseToAnyPublisher(),
|
||||
sub: &subscriptions
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
29
Modules/BusX/BusUI/src/BusUI.TextField.swift
Normal file
29
Modules/BusX/BusUI/src/BusUI.TextField.swift
Normal file
@@ -0,0 +1,29 @@
|
||||
import Combine
|
||||
import SwiftUI
|
||||
|
||||
extension BusUI {
|
||||
public final class TextField: ObservableObject {
|
||||
@Published public var v = "a:"
|
||||
var subscriptions = [AnyCancellable]()
|
||||
|
||||
public init(
|
||||
_ textApp: String,
|
||||
_ textUI: String
|
||||
) {
|
||||
Bus.send(
|
||||
textUI,
|
||||
$v
|
||||
.removeDuplicates()
|
||||
.compactMap(onlyUIText)
|
||||
.eraseToAnyPublisher(),
|
||||
sub: &subscriptions
|
||||
)
|
||||
|
||||
Bus.receive(
|
||||
[textApp],
|
||||
{ [weak self] (_, v: String) in self?.v = "a:\(v)" },
|
||||
sub: &subscriptions
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
22
Modules/BusX/BusUI/src/BusUI.TextFieldSource.swift
Normal file
22
Modules/BusX/BusUI/src/BusUI.TextFieldSource.swift
Normal file
@@ -0,0 +1,22 @@
|
||||
import Foundation
|
||||
|
||||
extension BusUI {
|
||||
public final class TextFieldSource: Formatter {
|
||||
/// Выдаём для отображения очищенную от источника строку.
|
||||
public override func string(for obj: Any?) -> String? {
|
||||
guard let str = obj as? String else { return nil }
|
||||
return String(str.dropFirst(2))
|
||||
}
|
||||
|
||||
/// Выдаём для использования кодом строку с указанием источника
|
||||
/// в виде пользователя `u:`
|
||||
public override func getObjectValue(
|
||||
_ obj: AutoreleasingUnsafeMutablePointer<AnyObject?>?,
|
||||
for string: String,
|
||||
errorDescription error: AutoreleasingUnsafeMutablePointer<NSString?>?
|
||||
) -> Bool {
|
||||
obj?.pointee = "u:\(string)" as AnyObject
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
20
Modules/BusX/BusUI/src/BusUI.Value.swift
Normal file
20
Modules/BusX/BusUI/src/BusUI.Value.swift
Normal file
@@ -0,0 +1,20 @@
|
||||
import Combine
|
||||
|
||||
extension BusUI {
|
||||
public final class Value<T>: ObservableObject {
|
||||
@Published public var v: T
|
||||
var subscriptions = [AnyCancellable]()
|
||||
|
||||
public init(
|
||||
_ key: String,
|
||||
_ defaultValue: T
|
||||
) {
|
||||
v = defaultValue
|
||||
Bus.receive(
|
||||
[key],
|
||||
{ [weak self] (_, v: T) in self?.v = v },
|
||||
sub: &subscriptions
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
1
Modules/BusX/BusUI/src/BusUI.swift
Normal file
1
Modules/BusX/BusUI/src/BusUI.swift
Normal file
@@ -0,0 +1 @@
|
||||
public enum BusUI { }
|
||||
@@ -1,13 +1,13 @@
|
||||
Pod::Spec.new do |s|
|
||||
|
||||
s.name = 'BusX'
|
||||
s.version = '2023.12.28'
|
||||
s.version = '2023.12.30'
|
||||
s.license = 'IVCS'
|
||||
s.summary = 'Шина общения элементов приложения'
|
||||
s.homepage = 'IVCS'
|
||||
s.author = 'IVCS'
|
||||
s.source = { :git => 'https://fake.com/FAKE.git', :tag => s.version }
|
||||
s.source_files = 'src/**/*.swift'
|
||||
s.source_files = '**/**/*.swift'
|
||||
s.swift_version = '5.2'
|
||||
s.ios.deployment_target = '14.0'
|
||||
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
import Combine
|
||||
|
||||
public extension Bus {
|
||||
final class Receiver<T> {
|
||||
var subscriptions = [AnyCancellable]()
|
||||
|
||||
public init(
|
||||
_ keys: Set<String>,
|
||||
_ handler: @escaping ((String, T) -> Void),
|
||||
opt: [Option] = []
|
||||
) {
|
||||
Bus.receive(keys, handler, opt: opt, sub: &subscriptions)
|
||||
}
|
||||
}
|
||||
}
|
||||
import Combine
|
||||
|
||||
public extension Bus {
|
||||
final class Sender<T> {
|
||||
var subscriptions = [AnyCancellable]()
|
||||
|
||||
public init(
|
||||
_ key: String,
|
||||
_ node: AnyPublisher<T, Never>,
|
||||
opt: [Option] = []
|
||||
) {
|
||||
Bus.send(key, node, opt: opt, sub: &subscriptions)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user