objective-c - __typeof self 在 Objective-C 泛型中?

标签 objective-c generics

新的 Objective-C 泛型语法是否可能或如何可能?

@class MyHelperClass<T>;

@interface NSObject (Extension)
    @property (nonatomic,readonly) MyHelperClass<MYTYPE *> * helper;
@end

问题是:

占位符 MYTYPE * 的语法是什么? - 它是否存在 - 这将使它适用于 NSObject 的任何子类。意思是,在 UIView 上例如,helper属性将返回 MyHelperClass<UIView *>NSString 上例如,它会返回 MyHelperClass<NSString *>__typeof self不适用于 self未在接口(interface)中定义。

非常感谢您的建议! :)

最佳答案

我认为这是不可能的。我能想到的最明显的方法如下:

@interface NSObject (Extension)

- (MyHelperClass<instancetype> *)a;

@end

根据 clang 文档,

instancetype is a contextual keyword that is only permitted in the result type of an Objective-C method

然而,这是一个编译器错误,因此也许文档应该阅读“instancetype is only permitted as the result type of an Objective-C method.”

我的下一个想法是通过编写一些 Swift 代码来作弊

protocol Test {
  var a: Array<Self> {get}
}

然后将其导入到 Objective-C 文件中,以查看预处理器如何将其转换为 Objective-C。可悲的是,根据 documentation here ,Swift 中的泛型无法从 Objective-C 访问——因为它们不是 Objective-C 语言的特性!根据修订历史,该文档实际上已针对 Swift 2.0 进行了更新。可能它们仍然不受支持,因为即使使用当前可用的泛型,Objective-C 类型系统也不像 Swift 那样具有表现力。

总而言之,除非存在一些我不知道的晦涩的 clang 扩展,否则我认为没有办法做到这一点。

关于objective-c - __typeof self 在 Objective-C 泛型中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33092145/

相关文章:

ios - 捕捉 UIView 内容重绘

iphone - 如何仅将 UILabel 的顶部两个角四舍五入?

java - 使用泛型返回带有类型参数的对象并避免类型安全警告

java - 带泛型的数组

c# - 这个协方差相关代码背后的意义是什么?

ios - Xcodebuild 不生成具有 x86_64 架构的动态框架

ios - Objective-C中两个double相乘后值 "-inf"是什么意思

objective-c - 修剪变量并分配给自身似乎不起作用

c# - 如何在从抽象派生的泛型类中隐式实现方法?

java - 是否可以评估一个类接口(interface)是否扩展了某个基类?