d
This commit is contained in:
38
src/VM.swift
Normal file
38
src/VM.swift
Normal 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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user