声明RLMArray时,第二组括号的意义是什么?领域是我见过的唯一使用过的地方。

@property NSArray<NSDictionary*> *dictionaries;  // I understand this (and it's wonderful!)
@property NSDictionary<NSString*, NSArray<NSString*>*> *dictionaryOfArraysOfStrings; // No problem with this either
@property RLMArray<Object*><Object> *objects; // What is <Object> for?

最佳答案

两组尖括号分别用于Objective-C泛型和协议(protocol)。 Objective-C泛型使编译器知道诸如-[RLMArray firstObject]之类的方法返回数组所包含的对象的特定类型,而不是返回任何可能的RLMObject子类。不幸的是,这些额外的类型信息在运行时会被删除,因此Realm无法通过在属性声明中仅使用Objective-C泛型来判断数组包含哪种对象。这就是协议(protocol)符合性的来源。属性符合的协议(protocol)可在运行时供Realm使用,因此用于通知Realm RLMArray属性将包含的对象类型。境界provides the RLM_ARRAY_TYPE macro声明与模型类同名的协议(protocol),因此很容易遗漏涉及协议(protocol)。

10-08 12:14