gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 09:28:17 26 4
gpt4 key购买 nike

我是 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com