标签: promisekit

使用PromiseKit从Objective C桥接到Swift

使用PromiseKit 2.0和Swift 1.2,我试图使用在Swift的Objective C中创建的PMKPromise.

目标C代码:

@interface FooTest : NSObject
+ (PMKPromise *)promise;
@end
Run Code Online (Sandbox Code Playgroud)

Swift代码(我尝试了很多变种,但没有一个变化.这个变化最接近http://promisekit.org/PromiseKit-2.0-Released/上给出的例子):

FooTest.promise().then { (obj: AnyObject?) in
    self.obj = obj
}
Run Code Online (Sandbox Code Playgroud)

编译器错误:无法使用类型'((AnyObject?) - > _)'的参数列表调用'then'

这也不起作用:

FooTest.promise().then { (obj: AnyObject?) -> AnyPromise in
    return AnyPromise()
}
Run Code Online (Sandbox Code Playgroud)

类似的错误:"无法使用类型'的参数列表调用'then'((AnyObject?) - > AnyPromise)'"

objective-c swift promisekit

2
推荐指数
1
解决办法
946
查看次数

如何使用swift-4 Promises then,done,catch和其他块

我想了解swift-4中的承诺.如何使用多个then语句并完成,捕获块.

在这里,我试图从承诺中获得价值.但是我收到了错误.有人可以帮我理解承诺吗?

这是我的代码.

import UIKit
import PromiseKit

struct User {
    var firstname : String?
    var lastname  : String?
}

struct APIError {
    var message : String?
}

class ViewController : UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let userPromise : Promise = self.getUserDetails()
        userPromise.then { user -> Void in
            //print(user.f)
        }
    }

    func getUserDetails()->Promise<User> {
        return Promise<User> { resolve in
            let user  = User(firstname: "Scot", lastname: "dem")
            if ((user.firstname?.count) != nil) {
                resolve.fulfill(user)
            } else {
                let error = APIError(message: …
Run Code Online (Sandbox Code Playgroud)

ios swift promisekit swift4

2
推荐指数
1
解决办法
3538
查看次数

PromiseKit不使用Swift 2和Xcode 7进行编译

这是我在安装PromiseKit后尝试构建项目时看到的错误.

Cannot import module being compiled.
Run Code Online (Sandbox Code Playgroud)

这是我的PodFile包含的安装PromiseKit的内容.

pod 'PromiseKit', :git => 'https://github.com/mxcl/PromiseKit.git', :branch => 'swift-2.0-minimal-changes'
Run Code Online (Sandbox Code Playgroud)

我尝试在PodFile中使用以下语句,但它抛出了更多的编译错误,所以我尝试了上面的语句.

pod "PromiseKit", "~> 2.0"
Run Code Online (Sandbox Code Playgroud)

xcode promisekit swift2

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

在PromiseKit 3.0和Swift 2中链接承诺

我怎么能在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");
}
Run Code Online (Sandbox Code Playgroud)

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

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

swift promisekit

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

未调用承诺的错误处理程序

我有一项服务,当我输入错误的登录凭据时该服务失败。但是,我的 Promise 错误处理程序没有被调用。

我似乎不明白我的代码有什么问题,因此error永远不会到达回调。

服务

func loadRepositories() -> Promise<[Repository]>{
    return Promise { fullfill, reject in
        manager.request(Method.GET, baseURL + "/api/1.0/user/repositories")
            .authenticate(user: username, password: password)
            .responseArray { (response: Response<[Repository], NSError>) in
                switch response.result{
                case .Success(let value):
                    fullfill(value)
                case .Failure(let e):
                    // The breakpoint here is reached.
                    reject(e)
                }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

处理

firstly{
    service!.loadRepositories()
}.then { repositories -> Void in
    loginVC.dismissViewControllerAnimated(true, completion: nil)
    self.onLoginSuccessful()
}.always{
    // Always gets called 
    loginVC.isSigningIn = false
}.error { error in
    // I never get …
Run Code Online (Sandbox Code Playgroud)

iphone ios swift promisekit

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

PromiseKit 6:如何创建多个并发承诺并将它们各自的结果分组到一个数组中?

我正在处理一个奇怪的 API,在那里我收到了一个 ID 列表,我需要单独请求每个 ID 的数据。我不需要一个接一个地链接这些请求,我只想一次抓住它们,但我无法弄清楚如何以一种干净的方式做到这一点。

我已经制定了获取一个 ID 的方法,它会生成一个Promise<DataObject>. 我如何将我的 ID 数组变成一组承诺,然后给我[DataObject]

func fetchDataObject(_ id: Int64) -> Promise<DataObject> {
    return makeURL("\(id)")
        .then {
            URLSession.shared.dataTask(.promise, with: $0)
        }.compactMap { (data, response) -> DataObject in
            // ...
            return try decoder.decode(DataObject.self, from: data)
    }
}

// get the list of IDs and turn them into DataObjects

func fetchNew() -> Promise<[DataObject]> { // desired output
    return makeURL("all_ids").then {
        URLSession.shared.dataTask(.promise, with: $0)
        }.compactMap { (data, response) -> [Int64] in
            // ...
            return …
Run Code Online (Sandbox Code Playgroud)

ios swift promisekit

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

PromiseKit For In 循环实现时

使用Swift,我PromiseKit第一次尝试将 Promise 合并到我的代码中,并且在语法上难以理解如何使其工作。

我的目标是将Firebase数据请求流水线化,并在所有返回的数据满足附加数组后执行另一种方法。似乎promise已解决并在使用数据设置数组之前运行最终方法。我相信我应该使用“when”,但不可否认的是理解文档有困难。

缩写,相关代码如下:

getPosts(ids).done {
    runningFinalMethod(self.arr)
}

func getPosts(_ ids: [String]) -> Promise<Void>  {
    return Promise { seal in
        for id in ids {
            db.collection("data").whereField("id", isEqualTo: id).getDocuments(completion: { (dataForId, error) in                
                appendData(dataForId)
            })
        }
        seal.fulfill(())
    }
}

func appendData(_ dataForId: [data]) {                                  
    arr.append(contentsOf: dataForId)            
}
Run Code Online (Sandbox Code Playgroud)

promise ios firebase swift promisekit

0
推荐指数
1
解决办法
1265
查看次数

无法将类型'Promise &lt;[NSDictionary]&gt;'的值转换为预期的参数类型'Guarantee &lt;Void&gt;'

目前,当我将我的PromiseKit从Swift 2更新到Swift 4时遇到了问题。我的许多Promise都将这个问题从NSDictionary退还给Guarantee Void。我不明白为什么会出现这个问题。如果有人可以向我解释,将不胜感激!

func getPlayerGameLog(sportName: String) -> Promise<NSArray> {
    let team = (self as? PlayerWithPositionAndGame)?.team
    let position = (self as? PlayerWithPositionAndGame)?.position

    if sportName == "mlb" {
        return when(Data.mlbPlayerGameLogs[id].get(), Data.sportsTeams[sportName].get()).then { (result, teams) -> NSArray in
            if result.count == 0 {
                return []
            } else {
                // Omitted Code
                return gameStats
            }
        }
    } else if sportName == "nfl" {
        return when(Data.nflPlayerGameLogs[id].get(), Data.sportsTeams[sportName].get()).then { (result, teams) -> NSArray in
            if result.count == 0 {
                return []
            } else {
                // …
Run Code Online (Sandbox Code Playgroud)

swift promisekit swift4

0
推荐指数
1
解决办法
675
查看次数

标签 统计

promisekit ×8

swift ×7

ios ×4

swift4 ×2

firebase ×1

iphone ×1

objective-c ×1

promise ×1

swift2 ×1

xcode ×1