Ign*_*ioC 5 generics nullable objective-c ios xcode7
使用新的xcode7 Apple为Objective-C引入了泛型和可空性(开发者指南)
但它似乎与我们在swift上的情况大不相同.
为空性:
- (nonnull NSString *)something {
return nil;
}
Run Code Online (Sandbox Code Playgroud)
这应该引发警告!您甚至可以将此方法的返回值分配给nonnull
变量,如:
//@property (copy, nonnull) NSString *name
obj.name = [obj something];
Run Code Online (Sandbox Code Playgroud)
泛型: 看这个例子:
@property (nonatomic, strong, nonnull) NSMutableArray <UIView *> *someViews;
Run Code Online (Sandbox Code Playgroud)
当在阵列上插入与UIView不同的内容时,会引发警告
[self.someViews addObject:@"foobar"]; //<- this raises an error
Run Code Online (Sandbox Code Playgroud)
但在这种情况下不是:
self.someViews = [@[@"foobar"] mutableCopy];
Run Code Online (Sandbox Code Playgroud)
在这种情况下:
NSString *str = [self.someViews firstObject];
Run Code Online (Sandbox Code Playgroud)
所以问题是,我是以错误的方式使用泛型和可空性,还是远离Swift实现?
self.someViews = [@[@"foobar"] mutableCopy];
Run Code Online (Sandbox Code Playgroud)
mutableCopy
继承自NSObject
,并声明返回id
。它没有被NSArray
专门声明,并且NSArray
不决定返回类型。
NSString *str = [self.someViews firstObject];
Run Code Online (Sandbox Code Playgroud)
这确实给了我一个警告。