2016-11-28 6 views
0

Я пытаюсь проверить форму с несколькими текстовыми полями. Но я могу наблюдать только тогда, когда оба текстовые поля редактируются ...Проверка формы в реактивном какао

let validUserNameSignal = 
    self.nameTextField 
     .reactive 
     .continuousTextValues 
     .skipNil() 
     .map({ $0.characters.count > 3 }) 

let pwdPasswordFieldSignal = 
    self.lastnameTextField.reactive 
     .continuousTextValues 
     .skipNil() 
     .map({$0.characters.count > 3}) 

let formValidation = validUserNameSignal.combineLatest(with: pwdPasswordFieldSignal) 

formValidation.observeValues { (userNameResult,pwdResult) in 
    print(userNameResult) 
    print(pwdResult) 
} 

ли способ, что я делаю хорошо, или есть другой способ?

ответ

1

Вот пример реализации основного ViewController, я очищены некоторые из вещей, которые я думаю, что можно было бы сделать лучше.

class ViewController: UIViewController { 
    @IBOutlet weak var nameTextField: UITextField! 
    @IBOutlet weak var passwordTextField: UITextField! 

    func nameValidation(for field: UITextField) -> Signal<Bool, NoError> { 
     return field 
      .reactive 
      .continuousTextValues 
      .skipNil() 
      .map { $0.characters.count > 3 } 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let validUserNameSignal = nameValidation(for: nameTextField) 
     let lastNameFieldSignal = nameValidation(for: lastNameTextField) 
     let formValidation = 
      SignalProducer(signal: validUserNameSignal.combineLatest(with: lastNameFieldSignal)) 
       .map { $0 && $1 } 
       .prefix(value: false) 

     formValidation.startWithValues { 
      print($0) 
     } 
    } 
} 
+0

[Charlotte Tortorella] (http://stackoverflow.com/users/1767606/charlotte-tortorella): NoError недействителен, или мне нужно импортировать дополнительный модуль? –

+0

Я нашел ответ: D http://stackoverflow.com/questions/35205550/getting-use-of-undeclared-type-noerror-with-reactivecocoa спасибо в любом случае! –

0

continuousTextValuesSignal, который имеет горячую семантику. Это означает, что он испускает только изменения, произошедшие после наблюдения.

Возможно, вы захотите превратить свой сигнал formValidation в производителя и префикс значения по умолчанию.

SignalProducer(signal: formValidation) 
    .map { $0 && $1 } 
    .prefix(value: false) 
    .startWithValues { ... } 
+1

Этот код не компилируется, так как 'formValidation' является' Signal' of '(Bool, Bool)'. –

+0

@andres. Определение вашего горячего сигнала, вероятно, неверно. –

+0

Верно, что я упустил тип 'formValidation'. Я исправил это. Но нет ничего плохого в том, что 'continuTextValues' является горячим сигналом. – Anders

 Смежные вопросы

  • Нет связанных вопросов^_^