我想学习如何使类方法返回instancetype
值,而不是id
。
简单演示:
@implementation MyGenericManagedObject
+ (instancetype)existingObjectByObjectID:(NSManagedObjectID *)objectID {
return (__typeof([self alloc]))[managedObjectContext() existingObjectWithID:objectID error:nil];
}
以这种方式编写此方法,它确实有效,但是如果我删除(__typeof([self alloc]))
,我开始得到“不兼容的指针类型转换'NSManagedObject *'以输入'MyGenericManagedObject *'。
从同一个类的类方法中获取实例类型的正确方法是什么?
答案 0 :(得分:2)
existingObjectWithID:error:
明确强制转换为NSManagedObject*
。坦率地说,这是API中的一个错误,您应该将其归档。
因此,你需要演员。
答案 1 :(得分:1)
@implementation MyGenericManagedObject
+ (instancetype)existingObjectByObjectID:(NSManagedObjectID *)objectID {
return (id)[managedObjectContext() existingObjectWithID:objectID error:nil];
}
只需转换为id
即可。