Apple 在新的 xcode7 中为 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 实现相去甚远?
最佳答案
self.someViews = [@[@"foobar"] mutableCopy];
mutableCopy
继承自NSObject
,声明返回id
。它不是由 NSArray
明确声明的,并且 NSArray
不决定返回类型。
NSString *str = [self.someViews firstObject];
这确实给我一个警告。
关于ios - 如何在 obj-c 上正确使用泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31781874/