JSONModel:填充泛型类型的NSArray

alb*_*osh 2 objective-c ios objc-protocol jsonmodel

我在我的iOS应用程序中使用JSONModel,我正面临一些警告,让我自己解释一下.

假设我有这个JSONModel

CTVContact.h

@interface CTVContact : JSONModel
@property (nonatomic, strong) NSArray<Optional, CTVPhone> *phone;
@end
Run Code Online (Sandbox Code Playgroud)

CTVContact.m

NSMutableArray *phones = [[NSMutableArray alloc] init];
for(NSString *p in personPhones) {
    CTVPhone *phn = [[CTVPhone alloc] init];
    phn.original = p;
    [phones addObject:phn];
}    
phone = [NSArray arrayWithArray:phones];
Run Code Online (Sandbox Code Playgroud)

基本上它都像一个魅力,但我得到一个警告,说明以下内容:

Incompatible pointer types assigning to 'NSArray<Optional,CTVEventParticipant> *' from 'NSArray *'
Run Code Online (Sandbox Code Playgroud)

我怎么能绕过那个警告?在没有该警告的情况下,我找不到将所有数组值分配给手机阵列的正确方法.

非常感谢提前!

Wai*_*ain 11

NSArray<Optional, CTVPhone> *phone;定义一个变量,该变量采用符合2个协议的数组.如果您尝试将变量(phone)设置为不声明它符合这些协议的数组,那么您将收到编译警告.

phone = [NSArray arrayWithArray:phones];只创建一个'普通'数组,没有实现特殊协议.所以你得到一个警告.

可能正确的做法是从@property定义中删除协议.除非你有一个NSArray符合你应该实际使用的协议的子类...

或者,假设您不尝试调用可能在这些协议中定义的任何方法:

phone = (NSArray <Optional, CTVPhone> *)[NSArray arrayWithArray:phones];
Run Code Online (Sandbox Code Playgroud)

它增加了一个基本上对编译器来说意味着什么的演员:'相信我,这很好'......