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

标签 ios objective-c generics nullable xcode7

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/

相关文章:

java - 对于这个简单的层次结构 Java 问题,我的最佳方法是什么?

c# - 实现通用接口(interface)的类的字典

ios - 从命令行更新 iOS 目标属性

objective-c - 如何计算frame.size.width

ios - 错误 : The specified provisioning profile could not be found

ios - 单例类静态变量每次都设置为 nil

ios - Clang(LLVM) 使用框架编译

c# - 如何使用泛型?

iphone - iOS 本地化我可以在 plist 中使用 2 个 ttf 文件吗?

objective-c - 简单的 bool 切换不起作用?