【问题标题】:Transform an array of value with async function and Reactive-Cocoa使用异步函数和 Reactive-Cocoa 转换值数组
【发布时间】:2016-09-07 14:25:30
【问题描述】:

我有一个 String 数组,我想通过对每个值调用异步函数来修改它。

我尝试了一些东西,但它只是创建了 RACSignalRACSequence,而不是修改后的 String 数组

func modifyValueAsynchronously(inputValue: String, completion: (String -> Void)) -> RACSignal  {
    return RACSignal.createSignal() { subscriber in
        doAServerCall(inputValue) { outputValue in
            subscriber.sendNext(outputValue)
        }
    }
}

let value: NSArray = ["a", "b"]

let result = value.rac_sequence.map({ value in
    return self.doRequest(value as! String)
})

【问题讨论】:

    标签: objective-c swift reactive-cocoa


    【解决方案1】:

    正如你所说,你想对数组中的每个字符串值执行一个异步函数。由于您是异步执行的,因此最终结果也将异步到达。在获得RACSequenceRACSignal 之后,您希望等到每个信号都为您提供值,然后将其全部收集到数组中。

    let transformation = { (input: String) -> RACSignal in
            return RACSignal.createSignal { subscriber in
                subscriber.sendNext(input + "a")
                return nil
            }
        }
    
        let array: NSArray = ["a", "b", "c", "d"]
    
        let sequence = array.rac_sequence.map({ (element) in
            return transformation(element as! String)
        })
        RACSignal.combineLatest(sequence).subscribeNext { (element) in
            let array = (element as! RACTuple).allObjects()
            print("Elements from array \(array) \n")
        }
    

    让我们举这个例子。转换闭包将异步添加一个“a”字母到每个字符串。创建序列后,我添加combineLatest 运算符,只要序列中的每个元素为我提供结果,它就会立即给我结果。一旦我得到所有结果,我就会在 subscribeNext 方法中得到一个 RACTuple,我可以从中创建一个数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-25
      • 2015-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多