This commit is contained in:
Михаил Капелько
2023-12-26 12:28:00 +03:00
parent 5617da4d79
commit 50a94c4b85
3 changed files with 21 additions and 16 deletions

8
src/Aux.swift Normal file
View File

@@ -0,0 +1,8 @@
/// Пропускаем лишь значения от UI
///
/// - Returns: Значение без префиксов "a:"/"u:"
static func onlyAcceptUIText(_ s: String) -> String? {
guard s.hasPrefix("u:") else { return nil }
return String(s.dropFirst(2))
}

View File

@@ -1,17 +1,17 @@
import Foundation import Foundation
class TextFieldValueOwner: Formatter { class TextFieldValueOwner: Formatter {
override func string(for obj: Any?) -> String? { override func string(for obj: Any?) -> String? {
guard let str = obj as? String else { return nil } guard let str = obj as? String else { return nil }
return String(str.dropFirst(2)) return String(str.dropFirst(2))
} }
override func getObjectValue( override func getObjectValue(
_ obj: AutoreleasingUnsafeMutablePointer<AnyObject?>?, _ obj: AutoreleasingUnsafeMutablePointer<AnyObject?>?,
for string: String, for string: String,
errorDescription error: AutoreleasingUnsafeMutablePointer<NSString?>? errorDescription error: AutoreleasingUnsafeMutablePointer<NSString?>?
) -> Bool { ) -> Bool {
obj?.pointee = "u:\(string)" as AnyObject obj?.pointee = "u:\(string)" as AnyObject
return true return true
} }
} }

View File

@@ -12,10 +12,7 @@ final class VM: ObservableObject {
$text $text
// Исключаем конфликты от UI и App путём игнорирования спама. // Исключаем конфликты от UI и App путём игнорирования спама.
.debounce(for: .seconds(0.3), scheduler: DispatchQueue.main) .debounce(for: .seconds(0.3), scheduler: DispatchQueue.main)
// Нужны лишь значения от UI. .compactMap(onlyAcceptUIText)
.filter { $0.hasPrefix("u:") }
// Убираем источник.
.map { String($0.dropFirst(2)) }
.eraseToAnyPublisher(), .eraseToAnyPublisher(),
sub: &subscriptions sub: &subscriptions
) )