JSONModel: заполнение NSArray универсального типа
Я использую JSONModel в своем приложении для iOS, и у меня появилось несколько предупреждений, позвольте мне немного объяснить.
Допустим, у меня есть эта JSONModel
CTVContact.h
@interface CTVContact : JSONModel
@property (nonatomic, strong) NSArray<Optional, CTVPhone> *phone;
@end
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];
В основном все работает как шарм, но я получаю предупреждение о следующем:
Incompatible pointer types assigning to 'NSArray<Optional,CTVEventParticipant> *' from 'NSArray *'
Как я могу обойти это предупреждение? Я не могу найти правильный способ назначить все значения массива для телефонного массива без этого предупреждения.
Заранее большое спасибо!
2 ответа
NSArray<Optional, CTVPhone> *phone;
определяет переменную, которая принимает массив, который соответствует 2 протоколам. Если вы попытаетесь установить эту переменную (phone
) в массив, который не утверждает, что он соответствует этим протоколам, тогда вы получите предупреждение компиляции.
phone = [NSArray arrayWithArray:phones];
просто создает "простой" массив без специальных протоколов. Так что вы получите предупреждение.
Вероятно, правильное решение - удалить протоколы из определения @property. Если у вас нет NSArray
подкласс, который соответствует тем протоколам, которые вы должны использовать...
В качестве альтернативы и при условии, что вы не пытаетесь вызвать какие-либо методы, которые могут быть определены в этих протоколах:
phone = (NSArray <Optional, CTVPhone> *)[NSArray arrayWithArray:phones];
который добавляет приведение, которое в основном означает для компилятора: "поверь мне, все в порядке"...
Похоже, что он может жаловаться на вашей последней строке, так как вы проходите в NSMutableArray
когда NSArray
"s arrayWithArray
вызов метода для NSArray
, Вы можете уйти с этим по телефону copy
на phones
массив, как таковой:
phone = [NSArray arrayWithArray:[phones copy]];