Существует множество отличных библиотек для тех, кого это интересует
Там действительно, в наши дни не должно быть необходимости придумывать свои собственные спецификаторы форматирования.
С Объединением (Xcode11 +, iOS13 +) это стало легче.
Первый необходимо быть в состоянии создать издателя для текстовых изменений:
extension UITextField {
var textPublisher: AnyPublisher<String, Never> {
NotificationCenter.default
.publisher(for: UITextField.textDidChangeNotification, object: self)
.compactMap { [110].object as? UITextField }
.map { [110].text ?? "" }
.eraseToAnyPublisher()
}
}
Тогда можно объединить несколько издателей от нескольких текстовых полей:
private var readyToLogIn: AnyPublisher<Bool, Never> {
return Publishers
.CombineLatest(
emailTextField.textPublisher, passwordTextField.textPublisher
)
.map { email, password in
!email.isEmpty && !password.isEmpty
}
.eraseToAnyPublisher()
}
И затем изменяют Вашу кнопку isEnabled свойство на основе того объединенного Издателя
readyToLogIn
.receive(on: RunLoop.main)
.assign(to: \.isEnabled, on: signInButton)