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

Ios 如何在obj-c上正确使用泛型?,ios,objective-c,generics,nullable,xcode7,Ios,Objective C,Generics,Nullable,Xcode7,在新的xcode7中,Apple引入了泛型和Objective-C()的可空性 但它似乎与我们在swift上看到的非常不同 可空性: - (nonnull NSString *)something { return nil; } 这应该是一个警告!您甚至可以将此方法的返回值指定给非null变量,如: //@property (copy, nonnull) NSString *name obj.name = [obj something]; 泛型: 看看这个例子: @propert

在新的xcode7中,Apple引入了泛型和Objective-C()的可空性

但它似乎与我们在swift上看到的非常不同

可空性:

- (nonnull NSString *)something {
    return nil;
}
这应该是一个警告!您甚至可以将此方法的返回值指定给
非null
变量,如:

//@property (copy, nonnull) NSString *name

obj.name = [obj something]; 
泛型: 看看这个例子:

@property (nonatomic, strong, nonnull) NSMutableArray <UIView *> *someViews;
在这种情况下:

self.someViews = [@[@"foobar"] mutableCopy];
NSString *str = [self.someViews firstObject];
所以问题是,我以错误的方式使用泛型和可空性,或者它们离Swift实现很远

self.someViews = [@[@"foobar"] mutableCopy];
mutableCopy
继承自
NSObject
,其中声明返回
id
。它不是由
NSArray
专门声明的,并且
NSArray
des不决定返回类型

NSString *str = [self.someViews firstObject];

这确实给了我一个警告。

似乎没有“正确”使用泛型和可空性。在特定情况下,它们只提供一些警告,对于传达开发人员的意图更有用。我认为这应该是一个功能请求,因为它似乎是静态分析器可以捕捉到的东西。
NSString *str = [self.someViews firstObject];