新的 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/