Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用ReactiveCocoa 4.0和MVVM实现双向绑定_Ios_Swift_Reactive Cocoa_Reactive Cocoa 4 - Fatal编程技术网

Ios 如何使用ReactiveCocoa 4.0和MVVM实现双向绑定

Ios 如何使用ReactiveCocoa 4.0和MVVM实现双向绑定,ios,swift,reactive-cocoa,reactive-cocoa-4,Ios,Swift,Reactive Cocoa,Reactive Cocoa 4,我在一个使用被动Cocoa 4.0和MVVMswift 2.0的项目中工作。在视图模型中,我有一个字符串,它将根据textfield的更改进行更新,但如果字符串更改,我需要更新该textfield。textfield和stringageString之间是否可以进行双向绑定 txtAge.rac_textSignal() ~> RAC(objViewModel, "ageString") 在RAC 2.x之前,您可以使用RACChannel,它提供了此功能,您可以订阅每个通道终端,并在新值

我在一个使用被动Cocoa 4.0和MVVMswift 2.0的项目中工作。在视图模型中,我有一个字符串,它将根据textfield的更改进行更新,但如果字符串更改,我需要更新该textfield。textfield和stringageString之间是否可以进行双向绑定

txtAge.rac_textSignal() ~> RAC(objViewModel, "ageString")

在RAC 2.x之前,您可以使用RACChannel,它提供了此功能,您可以订阅每个通道终端,并在新值到达时收到通知。 通道和终端还没有移植到RAC 2.x,所以现在RAC中没有双向绑定,但这应该不是什么大问题,因为您总是能够找到不同的imho更好的方法

有关更多详细信息,您可以在github上的框架问题中找到有关此主题的许多线程,例如:


在RAC 2.x之前,您可以使用RACChannel,它提供了此功能,您可以订阅每个通道终端,并在新值到达时收到通知。 通道和终端还没有移植到RAC 2.x,所以现在RAC中没有双向绑定,但这应该不是什么大问题,因为您总是能够找到不同的imho更好的方法

有关更多详细信息,您可以在github上的框架问题中找到有关此主题的许多线程,例如:


您可以尝试以下代码:

viewModel.ageString.producer
         .skipRepeats { [weak self] in
                 $1 == self?.txtAge.text
         }.startWithNext { [weak self] in
                 self?.txtAge.text = $0
}

viewModel.ageString <~ txtAge.rac_textSignal()
        .toSignalProducer()
        .map { ($0 as? String) ?? "" }
        .flatMapError { _ in SignalProducer<String, NoError>.empty }

您可以尝试以下代码:

viewModel.ageString.producer
         .skipRepeats { [weak self] in
                 $1 == self?.txtAge.text
         }.startWithNext { [weak self] in
                 self?.txtAge.text = $0
}

viewModel.ageString <~ txtAge.rac_textSignal()
        .toSignalProducer()
        .map { ($0 as? String) ?? "" }
        .flatMapError { _ in SignalProducer<String, NoError>.empty }