我正在尝试成功完成映射后调用一个函数。 可观察对象是通过映射从现有流创建的。在映射块内,我订阅以获取映射到最终类型的输出。随着更新的流,我正在考虑调用该函数。但是在我订阅并将其映射到更新的流之前会调用该函数。
这是示例代码:
let updatedDataStream = dataStream
.observeOn(MainScheduler.instance)
.map { (data) -> ViewData? in
guard var unknownData = data as? UnknownDataType,
let location = unknownData.dataPoints.first?.location else {
return data
}
let dataModel = DataModel(x: location.x, y: location.y)
self.dataStore.localStore?
.entity(forID: DataModel.entityID)
.filter({$0?.status == .Success})
.take(1)
.unwrap()
.subscribe(onNext: { (localDataModel) in
guard let value = localDataModel.dataValue, value.count > 0 else {
return
}
unknownData.value = value
}).disposed(by: self.disposeBag)
return unknownData
}
self.attachUpdatedData(updatedDataStream)
attachUpdatedData(_:)
仅在检索了updatedDataStream之后才被调用。通过上述实现,在将数据映射到新值之前首先调用attachUpdatedData(_:)
。有人可以指出我正确的方向吗?
答案 0 :(得分:0)
在地图内订阅(或进行任何转换)是不行的。您将在'dataStream'的每个项目上创建一个新的订阅,并且实际上将失去对数据流的所有控制。同样,在执行“ onNext:”之前,很可能从“ .map()”返回“ unknownData”。
您要达到什么目标?