使用新的xcode7 Apple为Objective-C(Developer guide)引入了泛型和可空性
但它似乎与我们在swift上的情况大不相同。
空性:
- (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实现?
答案 0 :(得分:1)
self.someViews = [@[@"foobar"] mutableCopy];
mutableCopy
继承自NSObject
,声明其返回id
。它不是由NSArray
专门声明的,NSArray
des不决定返回类型。
NSString *str = [self.someViews firstObject];
这个确实给我一个警告。