С новым xcode7 компании Apple представила дженерики и допустимость пустых для Objective-C (Developer guide)Как правильно использовать дженерики на obj-c?
Но это, кажется, очень отличается от того, что мы имеем на стрижа.
допустимость пустых:
- (nonnull NSString *)something {
return nil;
}
Это должно вызвать предупреждение! И вы даже можете присвоить возвращаемое значение этого метода до nonnull
переменной как:
//@property (copy, nonnull) NSString *name
obj.name = [obj something];
Дженерики: Глядя этот пример:
@property (nonatomic, strong, nonnull) NSMutableArray <UIView *> *someViews;
предупреждение возникает, когда что-то другое от UIView вставляется в массив
[self.someViews addObject:@"foobar"]; //<- this raises an error
но не в этом случае:
self.someViews = [@[@"foobar"] mutableCopy];
ни в этом случае:
NSString *str = [self.someViews firstObject];
Так что вопрос, я использую генериков и допустимость пустых в неправильном направлении или они находятся далеко от Swift реализации?
Кажется, что нет «правильного» использования дженериков и допустимости. В конкретном случае они предлагают только некоторые предупреждения, и они более полезны для связи с намерением разработчика. – IgnazioC
Я думаю, что это должен быть запрос функции, поскольку это похоже на то, что статический анализатор может поймать. – Moxy