Objective-C泛型中__typeof self?

Tre*_*kow 5 generics objective-c

这是 - 或者这是如何 - 使用新的Objective-C泛型语法?

@class MyHelperClass<T>;

@interface NSObject (Extension)
    @property (nonatomic,readonly) MyHelperClass<MYTYPE *> * helper;
@end
Run Code Online (Sandbox Code Playgroud)

问题是:

占位符的语法是什么MYTYPE *- 它是否存在 - 可以使它与NSObject的任何子类一起使用.含义,即上一个UIView实例,该helper属性将返回MyHelperClass<UIView *>与上一个NSString实例,它会返回MyHelperClass<NSString *>__typeof self不起作用,因为self没有在界面中定义.

建议非常感谢!:)

Ben*_*ous 5

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

@interface NSObject (Extension)

- (MyHelperClass<instancetype> *)a;

@end
Run Code Online (Sandbox Code Playgroud)

根据clang文档,

instancetype 是一个上下文关键字,只允许在Objective-C方法的结果类型中使用

但是,这是一个编译器错误,因此文档可能应该是"只允许将instancetype 作为 Objective-C方法的结果类型".

我的下一个想法是写一些Swift代码作弊

protocol Test {
  var a: Array<Self> {get}
}
Run Code Online (Sandbox Code Playgroud)

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

总之,除非我不知道存在一些模糊的铿锵声,我认为没有办法做到这一点.