在Objective-C中,我可以这样做:
@interface MyManagedObjectSuperClass : NSManagedObject
+(NSString*)entityName;
@end
@implementation
+(NSString*)entityName
{
return NSStringFromClass([self class])
}
@end
使用这个基类,我的所有其他NSManagedObjects
都可以从MyManagedObjectSuperClass继承。我可以通过调用+entityName
获取实体名称,因为polymorphism
,在子类中,NSStringFromClass([self class])
返回子类的类名。
所以我的问题是,我可以在Swift中这样做吗?
答案 0 :(得分:1)
在NSObject
子类的类方法中,两者都是
toString(self)
NSStringFromClass(self)
返回包含类名的字符串(包括产品模块名称) 调用该方法的实际子类。
参见How can I create instances of managed object subclasses in a NSManagedObject Swift extension? 例如,如何从完整中提取Core Data实体名称 班级名称。
答案 1 :(得分:0)
您可以使用dynamicType
获取类名(包括模块名称),并使用字符串插值将其转换为字符串:
class Class1 {
var entityName: String {
return "\(self.dynamicType)"
}
}
最明显的区别是它是一个实例而不是静态属性/方法 - 这可能是你的情况下的一个限制,因为我认为你想要从类型中获取名称,而不是它的实例。
答案 2 :(得分:0)
这是一种直截了当的方法吗?
class Base {
class func typeName() -> String {
return "\(self)"
}
}
class X: Base {}
print(Base.typeName()) // Base
print(X.typeName()) // X