gpt4 book ai didi

ios - 如何阻止 objc 代码转换为可选代码

转载 作者:行者123 更新时间:2023-11-30 11:10:29 25 4
gpt4 key购买 nike

所以我正在使用这个名为“moip”的支付网关(我来自巴西,stripe在这里不起作用),它获取用户的信用卡信息并进行哈希(由于敏感数据传输等)。但由于某种原因,这段代码需要一个 2 长度类型的字符串来表示月份和年份,当我传递这些值时,它们变成可选的,因此主函数(生成哈希)不起作用并返回 nil。示例代码:

func createHash() -> String? {            
let creditCard = MPKCreditCard()
creditCard.number = "1234567891234567"
creditCard.expirationMonth = "01"
creditCard.expirationYear = "19"
creditCard.cvc = "123"
return MoipSDK.encryptCreditCard(creditCard)
}

这是 objc 中的 MPKCreditCard 对象:

#import <Foundation/Foundation.h>
#import "MPKCardType.h"

@interface MPKCreditCard : NSObject

@property NSString *number;
@property NSString *cvc;
@property NSString *expirationMonth;
@property NSString *expirationYear;

- (BOOL) isNumberValid;
- (BOOL) isSecurityCodeValid;
- (BOOL) isExpiryDateValid;
- (MPKCardType) cardType;

@end

属性“isEspiryDateValid”当然总是返回 false,其他都可以。

- (BOOL) isExpiryDateValid {
return [self isValidLengthExpiryDate] && [self isValidDate];
}

- (BOOL)isValidLengthExpiryDate {
return self.expirationMonth.length == 2 && (self.expirationYear.length == 2 || self.expirationYear.length == 4);
}

- (BOOL)isValidDate {
if (self.expirationMonth <= 0 || [self month] > 12) return NO;

return [self isValidWithDate:[NSDate date]];
}

这是创建哈希的函数:

+ (NSString *)encryptCreditCard:(MPKCreditCard*)creditCard {

NSString *valueToEncrypt = [NSString stringWithFormat:@"number=%@&cvc=%@&expirationMonth=%@&expirationYear=%@", creditCard.number, creditCard.cvc, creditCard.expirationMonth, creditCard.expirationYear];
NSLog(@"%@", valueToEncrypt);
NSString *encriptedData = [MPKUtilities encryptData:valueToEncrypt keyTag:kPublicKeyName];

if (encriptedData) {
return encriptedData;
}

return nil;
}

我对 objc 不太了解,但该属性看起来与其他属性没有什么不同(这会将值变成可选值)。

我知道支付网关公司应该为我提供解决方案,我相信他们会的,但今天(9 月 7 日)是独立日,没有任何效果。所以我真的可以利用你的帮助,否则就在周一:(

简而言之,我的问题是:我将未包装的非可选值传递给expirationMonth 和expirationYear。但是当对象(mpkcreditcard)接收到它们时,它会将它们变成可选值。

非常感谢你们,伙计们!

最佳答案

我不太明白这个问题,但我相信你遇到的是 obj-c 中的所有这些值都是可以为空的,所以当桥接到 swift 时,它们就变成了可选值。您只需打开它们即可使用它们...

guard let experationMonth = creditcard.experationYear else { /* handle null */ }
print("\(experationMonth)")

这应该打印一个展开的字符串,不带可选的[""]

关于ios - 如何阻止 objc 代码转换为可选代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52229612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com