Ios 请帮助编写没有意义的协议代码

Ios 请帮助编写没有意义的协议代码,ios,objective-c,cocoa,Ios,Objective C,Cocoa,我被这句话的一部分难住了: @property(nonatomic, readonly) NSArray <id<NSFetchedResultsSectionInfo>>*sections @property(非原子,只读)NSArray*节 此属性属于NSFetchedResultsController类。 尽管NSFetchedResultsSectionInfo是一种协议,id是一种必须符合NSFetchedResultsSectionInfo协议的对象类型i

我被这句话的一部分难住了:

@property(nonatomic, readonly) NSArray <id<NSFetchedResultsSectionInfo>>*sections
@property(非原子,只读)NSArray*节
此属性属于NSFetchedResultsController类。 尽管NSFetchedResultsSectionInfo是一种协议,
id
是一种必须符合NSFetchedResultsSectionInfo协议的对象类型
id
不是协议,因此将它们括在尖括号中
毫无意义。
语句NSArray
对我来说没有意义,因为如何将对象类型id设置为NSArray类的协议。有人能解释一下吗?谢谢。

该语法实际上并不意味着数组符合任何协议。这个符号有误导性。它只告诉您数组中的值是
id
,并且符合
NSFetchedResultsSectionInfo
协议

各国:

节数组中的对象实现NSFetchedResultsSectionInfo协议

您需要确保它只包含指定类型的值,如果您这样做,编译器需要告诉您正在尝试插入不兼容的对象

您可能想看看本文的最后一节

例如,如果您正在编写使用核心数据框架的iOS应用程序,则可能会遇到NSFetchedResultsController类。此类旨在帮助数据源对象将存储的数据提供给iOS UITableView,从而便于提供行数等信息

如果使用的表视图的内容被拆分为多个部分,还可以向“获取结果”控制器询问相关的部分信息。NSFetchedResultsController类不是返回包含此节信息的特定类,而是返回符合NSFetchedResultsSectionInfo协议的匿名对象。这意味着仍然可以查询对象以获取所需的信息,例如节中的行数

即使您不知道sectionInfo对象的类,NSFetchedResultsSectionInfo协议规定它可以响应numberOfObjects消息


谢谢你的解释。我非常感激。我想NSArray*部分是我错过的一些新语法。另外,苹果为什么要写@property(非原子,只读)NSArray*节作为属性声明呢。它给人的印象是,这确实是协议中的一个实际属性声明。仅仅在协议声明@property(非原子,只读)中指出不是更清楚吗NSArray*部分,只是解释NSArray的对象是id类型。将所有内容放在一行中会给人一种印象,即它是实际的声明。很有趣。“以前从未遇到过这种情况。@DonGiovanni好吧,是的,你可能会明白它更干净。是的,但它不仅是为你,它也为编译器。也许他们应该选择不同的语法。如果你想知道为什么苹果会做出这样的决定,你必须和他们谈谈;)我所知道的只是我在文档中能找到的东西。