У меня есть свойство self.shareURL
, которое может быть или не быть nil
, и я хотел бы обернуть его в массив. Очевидно, если это nil
, я не могу этого сделать, поэтому я хотел бы иметь пустой массив в этом случае. Так что я могу написать:[NSArray arrayWithObjects: nil, nil]
NSArray *items = [self shareURL] ? @[[self shareURL]] : @[];
Однако, я могу построить его в одном вызове shareURL
, как это:
NSArray *items = [NSArray arrayWithObjects:[self shareURL], nil];
Это работает, потому что arrayWithObjects:
остановится в любом случае, когда он видит первый nil
и стек не поврежден, потому что Objective-C ABI не требует, чтобы он очищал varargs в стеке.
Можно ли использовать вторую форму? Или первый, более четкий?
Да, вторая форма должна работать. Однако, если вы его используете, обязательно прокомментируйте эту операцию, чтобы вы поняли, что вы делаете через год. –