首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用async函数和Reactive-Cocoa转换值数组

使用async函数和Reactive-Cocoa转换值数组
EN

Stack Overflow用户
提问于 2016-09-07 22:25:31
回答 1查看 277关注 0票数 1

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

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

代码语言:javascript
复制
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)
})
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-08 00:48:15

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

代码语言:javascript
复制
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,然后我就可以把它组成一个数组。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39372584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档