即使问题很广泛,我实际上还是对最近在使用Realm library时播下的一种情况感到好奇。正如我之前在很多场合使用protocols(delegate)以及使用导入类一样。现在,这是我不完全理解或根本不理解的代码行:@property (nonatomic, strong) RLMArray <ExerciseLog *><ExerciseLog> * exerciseLogs;我想<ExerciseLog> * exerciseLogs行的第二部分用于确保executionLogs可以是任何符合ExerciseLog协议的ExerciseLog的实例,我的假设正确吗?或简单地说,如果用户发送的对象不同于预期的对象,则该应用不会崩溃,并且将分配一个默认值。我猜这部分是某种安全的转换,以便返回的对象可以对ExerciseLog进行确认。 最佳答案 Obj-C协议一致性和泛型的组合。 RLMArray被声明为@interface RLMArray < RLMObjectType : RLMObject * > : NSObject<RLMCollection,NSFastEnumeration>它有一个通用的论点。那是<ExerciseLog *>。第二部分<ExerciseLog>符合给定类型的协议。顺便说一句,该协议是使用RLM_ARRAY_TYPE宏声明的。该代码似乎有些复杂,但是它可能是对数组强制元素类型的一种较旧的方法(RLMArray<protocolX>不能分配给RLMArray<protocolY>)。引用文档:与NSArray不同,RLMArrays保留由objectClassName属性指定的单一类型。这些文档中将其称为数组的“类型”。声明RLMArray属性时,必须使用与它应包含的对象相同的名称将其标记为符合协议(请参阅RLM_ARRAY_TYPE宏)。 RLMArray属性也可以使用Objective-C泛型(如果有)。例如:关于ios - Objective-C中尖括号的含义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35851086/
10-11 16:08