PromiseKit 框架 - 对成员“then()”的模糊引用

Posted

技术标签:

【中文标题】PromiseKit 框架 - 对成员“then()”的模糊引用【英文标题】:PromiseKit Framework - Ambiguous reference to member 'then()' 【发布时间】:2018-06-07 17:58:01 【问题描述】:

我正在使用 PromiseKit 框架版本 1.7.7(我需要使用这个版本,因为另一个框架需要它)。

所以,在这个使用 PromiseKit 框架的框架中有这个方法:

- (PMKPromise *)paymentTokenForCreditCard:(GNCreditCard *)creditCard 
    NSDictionary *cardDict = [creditCard paramsDicionary];
    NSString *jsonCard = [self getJSONStringFromDictionary:cardDict];

    return [self encryptData:jsonCard]
    .then(^(NSString *encryptedData)
        NSDictionary *params = @@"data":encryptedData;
        return [self request:kGNApiRouteSaveCard method:@"POST" params:params];
    )
    .then(^(NSDictionary *response)
        return [[GNPaymentToken alloc] initWithDictionary:response];
    );

它展示了如何使用它的这个例子:

GNConfig *gnConfig = [[GNConfig alloc] initWithAccountCode:@"YOUR_ACCOUNT_CODE" sandbox:YES];

GNApiEndpoints *gnApi = [[GNApiEndpoints alloc] initWithConfig:gnConfig];

GNCreditCard *creditCard = [[GNCreditCard alloc] init];
creditCard.number = @"4012001038443335";
creditCard.brand = kGNMethodBrandVisa;
creditCard.expirationMonth = @"05";
creditCard.expirationYear = @"2018";
creditCard.cvv = @"123";

[gnApi paymentTokenForCreditCard:creditCard]
.then(^(GNPaymentToken *paymentToken)
NSLog(@"%@", paymentToken.token);
)
.catch(^(GNError *error)
NSLog(@"An error occurred: %@", error.message);
);

好吧,我如何使用 Swift 而不是 Object-C,我正在尝试以这种方式使用它:

let gnConfig = GNConfig(accountCode: "3f62976bea79971730b67cd62806c256", sandbox: true)
let gnEndpoints = GNApiEndpoints(config: gnConfig)

let gnCreditCard: GNCreditCard! = GNCreditCard(number: "4012001038443335", brand: kGNMethodBrandVisa, expirationMonth: "05", expirationYear: "2018", cvv: "123")

gnEndpoints?.paymentToken(for: gnCreditCard).then( tokenPagamento in
    if let aToken = tokenPagamento?.token 
        print("\(aToken)")
    
).catch( error in
    if let aMessage = error?.message 
        print("An error occurred: \(aMessage)")
    
)

它向我显示了这个错误:

对成员'then()'的模糊引用

我该如何解决?

【问题讨论】:

PromiseKit 是否在您的 Swift 文件中的项目中的其他位置工作? 【参考方案1】:

试试下面的代码。承诺的事情应该起作用。根据您的需要进行修改。

gnEndpoints?.paymentToken(for: gnCreditCard).then( token -> () in
   if let token = token as? GNPaymentToken 
      print(token)
   
,  (error) -> () in
   // catch your error
)

【讨论】:

很高兴知道:)!

以上是关于PromiseKit 框架 - 对成员“then()”的模糊引用的主要内容,如果未能解决你的问题,请参考以下文章

PromiseKit 6 在没有上下文类型的情况下无法解析对成员“值”的引用

PromiseKit 6:无法使用类型为“((String,String)-> Promise<Data>)”的参数列表调用“then”

PromiseKit 分支承诺

使用 PromiseKit 时不明确地使用恢复错误

isKindOfClass 在 PromiseKit 中返回 nil 吗?

如何使用 PromiseKit/照片?