RLMArray属性声明语法

时间:2016-06-23 07:21:33

标签: objective-c realm

在声明RLMArray时,第二组括号的意义是什么? Realm是我见过这个地方的唯一地方。

@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?

1 个答案:

答案 0 :(得分:5)

两组尖括号分别用于Objective-C泛型和协议。 Objective-C泛型使编译器知道像-[RLMArray firstObject]这样的方法返回数组包含的特定对象类型,而不是任何可能的RLMObject子类。遗憾的是,这些额外的类型信息在运行时被删除,因此Realm无法在属性声明中单独使用Objective-C泛型来判断数组包含的对象类型。这是协议一致性的地方。属性符合的协议在运行时可用于Realm,因此用于通知Realm您的RLMArray属性将对象类型包含。领域provides the RLM_ARRAY_TYPE macro声明一个与模型类同名的协议,因此很容易错过协议。