Reactive(Cocoa)或以其他方式映射生成器,其map函数依赖于另一个生成器

时间:2015-12-28 21:32:45

标签: ios reactive-programming reactive-cocoa reactive-cocoa-3

道歉,如果这是一个非常基本的问题,但我有点精神困难。我可以继续作弊 - 引入一个foreach式循环或其他东西 - 但它会破坏目的。

我正在学习ReactiveCocoa和一般的概念。

我想制作AnnotationView一个UITextView,其NSAttributedString显示AnnotationViewModel内置annotatedText: String annotationTags: [AnnotationTags]AnnotationTags

AnnotationOccurrence反过来实际上是特定标签的所有AnnotationOccurrences的集合。例如,如果我们注释“the”这个词,我们可能最终会得到许多class DocumentAnalysisViewModel { let propertyText: MutableProperty<String> let propertyTags: MutableProperty<[AnnotationTagViewModel]> init(_ text: String, _ tags: [AnnotationTagViewModel]) { self.propertyText = MutableProperty(text) self.propertyTags = MutableProperty(tags) } } ,但只有一个标记为“the。”

AnnotationOccurrence

总之...

定义Occurrence的方式 - 由开始/结束索引(只有一对) - 将annotatedTextNSAttributedString紧密结合。

因此,要格式化AnnotationTags,,我需要annotatedText,因此我需要vm.propertyTags.producer.combineLatestWith(vm.propertyText.producer)同时提供标记。

这个小问题暴露了我在理解ReactiveCocoa和这种模式方面缺乏深度。我尝试了以下操作,但由于各种原因每次中途停止或提前停止:

  • map - 显然,如果没有(String, [AnnotationViewModel])将每个格式带到一个通用格式,比如说MutableProperty的元组 - 我停止了,因为它感到笨拙和错误
  • 映射整个对象或为整个对象创建DocumentAnalysisViewModelserver { listen 80 default_server; listen 443 ssl default_server; server_name backup.server.com; location / { include uwsgi_params; uwsgi_modifier1 5; #SOCKET for the app uwsgi_pass unix:///var/run/uwsgi/app/backupprocessor/socket; add_header Vary Accept-Encoding; add_header Cache-Control private; } } ) - **再次感觉不对,因为即使在这种情况下它更好,我也不会学习如何处理反应性设计中的常见需求)

感谢任何帮助!

0 个答案:

没有答案