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