【问题标题】:Objective C Block GenericsObjective C 块泛型
【发布时间】:2015-09-20 17:28:47
【问题描述】:

我正在尝试实现一个数据源,该数据源可用于为 tableview 自定义几个不同类别的单元格,但是我在传递给构造函数的块中遇到了泛型类型的问题。

这里是数据源头文件的实现:

@interface ABParseDatasource<__covariant ObjectType: UITableViewCell *> : NSObject <UITableViewDataSource>

- (instancetype)initWithCellIdentifier:(NSString *)identifier parseQuery:(PFQuery *)query tableView:(UITableView *)tableView customizeBlock:(void (^)(ObjectType))customBlock;

@end

这是我试图在构造函数中初始化块的地方:

self.parseDatasource = [[ABParseDatasource alloc] initWithCellIdentifier:identifier parseQuery:[ABOrder query] tableView:self.tableView customizeBlock:^(ABOrderItemTableViewCell *cell) {

}];

属性声明:

@property (nonatomic) ABParseDatasource<ABOrderItemTableViewCell *> *parseDatasource;

但我在实例化数据源时遇到编译器错误:

有什么想法吗? (是的,ABOrderItemTableViewCell 确实继承自 UITableViewCell)

【问题讨论】:

  • 你如何在@implementation 中声明init...?
  • @Sulthan - (instancetype)initWithCellIdentifier:(NSString *)identifier parseQuery:(PFQuery *)query tableView:(UITableView *)tableView customizeBlock:(void (^)(UITableViewCell *, PFObject *)) customBlock { 和 imgur imgur.com/ibKI2K9.png

标签: ios objective-c generics objective-c-blocks


【解决方案1】:

创建类时必须指定泛型类型:

[[ABParseDatasource<ABOrderItemTableViewCell *> alloc] initWithCellIdentifier...

【讨论】:

  • Obj-C 中的泛型不是用户友好的,它们的存在是为了与 Swift 更好的互操作性,而不是让 Obj-C 更好。
  • +1 @Sulthan 事实上,动态类型语言具有“内置泛型”(id 类型引用)。 “类模板”泛型是一种打破静态类型语言限制的技术。对于动态类型语言,没有限制。
  • 非常感谢!我一直想知道如何让泛型与初始化器一起工作!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-08
  • 2015-11-21
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
  • 2012-02-21
相关资源
最近更新 更多