ios - ReactiveCocoa 3 : Map signal to value (Swift)

标签 ios swift reactive-cocoa frp

我是 ReactiveCocoa 3 和 Swift 的新手,有以下代码示例。我想映射从 map 返回的信号函数接收 JSON start 中的值函数在最后。

此刻我正在通过 Signal<JSON, NSError>observestart里面功能。对此有更好的解决方案吗?

import Foundation
import ReactiveCocoa
import SwiftyJSON

class SearchViewModel {

    let results = MutableProperty<[MyModel]>([])
    let searchText = MutableProperty<String>("")

    init() {
        searchText.producer
            |> map { keyword -> Signal<JSON, NSError> in Api().get("search/\(keyword)") }
            |> start(
                next: { signal in
                    signal
                        |> observe(
                            next: { jsonArray in
                                let models = jsonArray.arrayValue.map(modelAdapter)

                                self.results.put(models)
                            }
                    )
                }
        )

    }

}

更新:

原来问题出在我对ReactiveCocoa的理解上。请参阅下面我的回答。

最佳答案

原来我的 Api.get() 函数应该返回一个 SignalProducer 而不是 Signal。通过这种调整,我最终得到了这样的解决方案:

let keywordToJson: SignalProducer<String, NSError>  -> SignalProducer<JSON, NSError> = flatMap(.Concat) { keyword in Api().get("search/\(keyword)" }

searchText.producer
    |> mapError { _ in NSError() }
    |> keywordToJson
    |> start(
        next: { jsonArray in
            let models = jsonArray.arrayValue.map(modelAdapter)

            self.results.put(models)
        }
)

注意事项:
(1) 目前看来,您必须向编译器提供一些关于 flatMap 函数类型的提示。
(2) 您还需要将属性 producer 的错误从 NoError 重新映射到 NSError

关于ios - ReactiveCocoa 3 : Map signal to value (Swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31082879/

相关文章:

ios - iOS 中的电子邮件验证问题?

iphone - 如何在 quartz 2d 中绘制 alpha < 1 的线

ios - VNImageBasedRequest regionOfInterest 不在规范化范围内

ios - 使用 alamofire 上传多个图像,而不使用 swift 中的 for 循环

ios - 在 iOS 上发布本地通知时可以执行代码吗?

swift - 如何组合多个 SignalProducers?

ios - Xcode 错误 : Auto property synthesis is synthesizing property not explicitly synthesized

ios - 将 SKShapeNode 转换为 SKSpriteNode 的最佳方法

ios - Reactivecocoa绑定(bind)UIButton的标题

ios - Reactive Cocoa 和短时间内的多个 AFNetworking 请求