请帮助没有意义的协议代码
Posted
技术标签:
【中文标题】请帮助没有意义的协议代码【英文标题】:Please help protocol code that does not make sense 【发布时间】:2015-06-16 16:52:42 【问题描述】:我对这句话的一部分感到困惑:
@property(nonatomic, readonly) NSArray <id<NSFetchedResultsSectionInfo>>*sections
此属性属于 NSFetchedResultsController 类。
虽然 NSFetchedResultsSectionInfo 是一个协议,但id<NSFetchedResultsSectionInfo>
是一个必须符合 NSFetchedResultsSectionInfo 协议的对象类型。 id<NSFetchedResultsSectionInfo>
不是协议,因此将它们括在尖括号中
<id<NSFetchedResultsSectionInfo>>
毫无意义。
声明 NSArray <id<NSFetchedResultsSectionInfo>>
对我来说没有意义,因为您如何使对象类型 id 成为 NSArray 类的协议。有人可以对此有所了解吗?谢谢。
【问题讨论】:
【参考方案1】:该语法实际上并不意味着数组符合任何协议。该符号具有误导性。它只告诉您数组内部的值是id
并符合NSFetchedResultsSectionInfo
协议。
documentation 声明:
sections 数组中的对象实现了 NSFetchedResultsSectionInfo 协议。
您需要确保它只包含指定类型的值,并且如果您这样做,编译器会告诉您您正在尝试插入不兼容的对象。
您可能想看看apple doc 的最后一部分。
例如,如果您正在编写一个使用 Core Data 框架的 ios 应用程序,您可能会遇到 NSFetchedResultsController 类。此类旨在帮助数据源对象向 iOS UITableView 提供存储的数据,从而轻松提供行数等信息。
如果您正在使用内容被分成多个部分的表格视图,您还可以向获取的结果控制器询问相关的部分信息。 NSFetchedResultsController 类不是返回包含此部分信息的特定类,而是返回一个符合 NSFetchedResultsSectionInfo 协议的匿名对象。这意味着仍然可以查询对象以获取您需要的信息,例如部分中的行数
即使您不知道 sectionInfo 对象的类,NSFetchedResultsSectionInfo 协议也规定它可以响应 numberOfObjects 消息。
【讨论】:
感谢您的解释。我非常感谢。我认为 NSArray以上是关于请帮助没有意义的协议代码的主要内容,如果未能解决你的问题,请参考以下文章