NSArray 元素无法匹配 Swift 数组元素类型预期的 JSONPaymentCard 但找到 __NSDictionaryI

NSArray element failed to match the Swift Array Element type Expected JSONPaymentCard but found __NSDictionaryI

我正在使用 JSONModel 从服务器转换值:

@interface PaymentCardsResponse: JSONModel
@property (strong, nonatomic) NSArray<JSONPaymentCard *> *userCards;
@end

但后来我尝试访问这个

response.userCards.forEach { card in } //here is an error

我有一个错误:

Precondition failed: NSArray element failed to match the Swift Array Element type Expected JSONPaymentCard but found __NSDictionaryI

为什么我把它放在那里?我错过了什么?

在JSONModel的README文件中,有一条注释说:

@interface OrderModel : JSONModel
@property (nonatomic) NSInteger orderId;
@property (nonatomic) float totalPrice;
@property (nonatomic) NSArray <ProductModel> *products;
@end

Note: the angle brackets after NSArray contain a protocol. This is not the same as the Objective-C generics system. They are not mutually exclusive, but for JSONModel to work, the protocol must be in place.

JSONModel 使用 <> 中的类型来确定要反序列化的数组的具体类型,并特别指出,您不能将其替换为 Objective-C 泛型系统(“不是相同”!),所以如果你这样做了:

@property (strong, nonatomic) NSArray<JSONPaymentCard *> *userCards;

你没有告诉 JSONModel 数组应该包含什么模型类型,所以它只是愚蠢地反序列化 NSDictionarys。您可以同时执行 Objective-C 泛型, 告诉 JSONModel 数组的类型,如自述文件中的下一个代码片段所示。

@property (strong, nonatomic) NSArray<JSONPaymentCard *> <JSONPaymentCard> *userCards;