如何在obj-c上正确使用泛型?

时间:2015-08-03 07:40:55

标签: ios objective-c generics nullable xcode7

使用新的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实现?

1 个答案:

答案 0 :(得分:1)

self.someViews = [@[@"foobar"] mutableCopy];

mutableCopy继承自NSObject,声明其返回id。它不是由NSArray专门声明的,NSArray des不决定返回类型。

NSString *str = [self.someViews firstObject];

这个确实给我一个警告。