RLMArray属性声明语法

ars*_*ius 2 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?
Run Code Online (Sandbox Code Playgroud)

bda*_*ash 5

两组尖括号分别用于Objective-C泛型和协议.Objective-C泛型使编译器知道-[RLMArray firstObject]返回数组包含的特定对象类型的方法,而不是任何可能的RLMObject子类.遗憾的是,这些额外的类型信息在运行时被删除,因此Realm无法在属性声明中单独使用Objective-C泛型来判断数组包含哪种类型的对象.这就是协议一致性进来.一个属性符合该协议在运行时提供给境界,所以用于通知对象类型,你的境界RLMArray属性将包含.Realm 提供RLM_ARRAY_TYPE来声明与模型类同名的协议,因此很容易错过涉及协议.