This commit is contained in:
Михаил Капелько
2023-12-13 19:19:53 +03:00
parent acaaf68d9f
commit 30efa129a8
5 changed files with 262 additions and 0 deletions

38
src/VM.swift Normal file
View File

@@ -0,0 +1,38 @@
import Combine
import SwiftUI
final class VM: ObservableObject {
@Published var text = ""
let changeText = PassthroughSubject<String, Never>()
var subscriptions = Set<AnyCancellable>()
init() {
// Уведомляем об изменении текста.
$text
.sink { [weak self] v in self?.changeText.send(v) }
.store(in: &subscriptions)
// Интерпретируем текст с задержкой, потому что:
// 1. смена @Published в ту же секунду игнорируется
// полем ввода, т.е. нужна задержка
// 2. ожидаем окончания ввода (спама), чтобы
// обработать введённое без потерь из-за конфликта
// старых данных и новых.
changeText
.debounce(for: .seconds(0.3), scheduler: DispatchQueue.main)
.sink { [weak self] v in
/*
guard
let out = MeetupId.shouldFormat(v),
v != out
else {
return
}
*/
let out = v
/**/print("ИГР TFCVM.init changeT in/out: '\(v)'/'\(out)'")
self?.text = out
}
.store(in: &subscriptions)
}
}