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

比如说,我想做以下几件事:

  1. 提出请求
  2. 提出获取请求
  3. 用数据重新加载表

promises这个概念似乎很适合这种情况.如果我能做这样的事情,PromiseKit可能是个不错的 Select :

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
}

但这是不可能的,至少我不知道.

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

我是iOS新手,所以也许我还缺少一些更基本的东西.我在Android等其他框架中所做的是在后台进程中执行这些操作,并使请求同步.但是Alamofire is inherently asynchronous,所以这种模式不是一种 Select .

推荐答案

在promises中包装其他异步内容的工作原理如下:

func myThingy() -> Promise<AnyObject> {
    return Promise{ fulfill, reject in
        Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"]).response { (_, _, data, error) in
            if error == nil {
                fulfill(data)
            } else {
                reject(error)
            }
        }
    }
}

编辑:现在,使用:https://github.com/PromiseKit/Alamofire-

Swift相关问答推荐

Swift中可以取消的延迟任务

在SwiftUI中使用自定义图像填充列表行的正确方法

SWIFT:使字典数组值可变

如何强制创建新的UIViewControllerRenatable|更新Make UIViewController上的视图

从任务中打印

';NSInternal不一致异常';,原因:';可见导航栏Xcode 15.0 Crash请求布局

字符串和整数格式的for循环,帮忙!

SwiftUI:列表背景为空列表时为黑色

如何返回一个通过 SwiftUI 中的另一个协议间接继承 View 协议的 struct ?

为 SwiftUI 中的属性提供默认值

try 制作一个 Swift 扩展来替换字符串中的多次出现

SwiftUI 视图的默认成员初始化器 VS 自定义初始化器

SwiftUI Observed Object 在发布值更改时未更新

如何仅将 SwiftUI 不透明度应用于父视图?

为什么 Swift Tuples 只能在元素个数小于等于 6 的情况下进行比较?

在 Swift 中,如何查看 Process() 传递给 shell 的字符串?

iOS Swift - 如何更改表格视图的背景 colored颜色 ?

Swift - 导入我的 swift 类

如何在 GCD 中停止 DispatchWorkItem?

如何快速将弹出框调整为表格视图中内容的大小?