当前位置:  开发笔记 > 前端 > 正文

在PromiseKit 3.0和Swift 2中链接承诺

如何解决《在PromiseKit3.0和Swift2中链接承诺》经验,为你挑选了1个好方法。

我怎么能在PromiseKit 3.0和Swift 2中链接承诺?我正在尝试以下代码:

let url = "https://httpbin/org/get";
let url2 = "https://httpbin/org/get";
firstly {
    NSURLSession.GET(url)
}.then { (json: NSDictionary) in
    NSURLSession.GET(url2) // Error in this line
}.then { (json: NSDictionary) in
    print("End of second request");
}

但我在第6行得到错误"无法将类型'URLDataPromise'的值转换为关闭结果类型'AnyPromise'".

这基本上是从PromiseKit网站检索的样本,它应该可以工作,不是吗?我究竟做错了什么?



1> Eduardo Cobu..:

我想到了.问题只是NSURLSession.GET没有返回NSDictionary,因此以下代码足以解决问题:

let url = "https://httpbin/org/get";
let url = "https://httpbin/org/get";
let url2 = "https://httpbin/org/get";
firstly {
    NSURLSession.GET(url)
}.then { data in
    NSURLSession.GET(url2)
}.then { data in
    print("End of second request");
}

一个重要的事情是,如果你的闭包有多行代码,Swift就无法推断出类型,如果是这种情况你必须在闭包声明中指定类型.这里举一些例子:

let url = "https://httpbin/org/get";
let url2 = "https://httpbin/org/get";
firstly {
    NSURLSession.GET(url)
}.then { data -> URLDataPromise in
    print("Two lines clojure with return");
    return NSURLSession.GET(url2)
}.then { data -> Void in
    print("Two lines clojure without return");
    print("Second line sample");
}


谢谢!关于Swift如果有多行代码就无法推断出你的闭包类型的说明让我疯了.我无法理解为什么我的一些.then闭包很乐意推断 - 其他人需要明确指定类型(它们是单行!).
推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有