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没有在界面中定义.
建议非常感谢!:)
我不认为这是可能的.我能想到的最明显的方法是:
@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那样具有表现力.
总之,除非我不知道存在一些模糊的铿锵声,我认为没有办法做到这一点.
| 归档时间: |
|
| 查看次数: |
382 次 |
| 最近记录: |