相关疑难解决方法(0)

连锁多个Alamofire请求

我正在寻找一个可以链接多个HTTP请求的好模式.我想使用Swift,最好是Alamofire.

比如说,我想做以下事情:

  1. 提出PUT请求
  2. 发出GET请求
  3. 用数据重新加载表

承诺的概念似乎很适合这一点.如果我可以做这样的事情,PromiseKit可能是个不错的选择:

NSURLConnection.promise(
    Alamofire.request(
        Router.Put(url: "http://httbin.org/put")
    )
).then { (request, response, data, error) in
    Alamofire.request(
        Router.Get(url: "http://httbin.org/get")
    )   
}.then { (request, response, data, error) in
    // Process data
}.then { () -> () in
    // Reload table
}
Run Code Online (Sandbox Code Playgroud)

但那是不可能的,或者至少我不知道.

如何在不嵌套多个方法的情况下实现此功能?

我是iOS的新手,所以也许有一些我缺少的基础知识.我在其他框架(如Android)中所做的是在后台进程中执行这些操作并使请求同步.但Alamofire本质上是异步的,所以这种模式不是一种选择.

ios swift alamofire promisekit

46
推荐指数
4
解决办法
3万
查看次数

如何确保OperationQueue中的操作一个接一个地完成

当执行彼此依赖的操作时,OperationQueue可以使用它们来确保它们以正确的顺序执行.但是,是否也可以确保操作一个接一个地完成?

让我们假设一个异步执行的方法,需要一些时间才能完成:

public func performOperation(_ number: Int, success: @escaping (Int) -> Void)->Void {
        DispatchQueue(label: "operations").async {
            print("Operation #\(number) starts")
            usleep(useconds_t(1000-number*200)) // Block thread for some time
            success(number)
        }
}
Run Code Online (Sandbox Code Playgroud)

操作和依赖关系创建如下:

let operationQueue = OperationQueue.main
for operationNumber in 0..<4 { // Create operations as an example
    let operation = BlockOperation(block: {
        performOperation(operationNumber) { number in
            DispatchQueue.main.sync {
                print("Operation #\(number) finished")
            }
        }
    })
    operation.name = "Operation #\(operationNumber)"

    if operationNumber > 0 {
        operation.addDependency(operationQueue.operations.last!)
        // Print dependencies
        print("\(operation.name!) should finish …
Run Code Online (Sandbox Code Playgroud)

concurrency nsoperation nsoperationqueue ios swift

4
推荐指数
1
解决办法
3560
查看次数