我正在尝试使用标准子类来使用swift。
桥接-Header.h
#import <Parse/Parse.h>
#import <Parse/PFObject+Subclass.h>
#import <Parse/PFGeoPoint.h>
子类
class Event: PFObject, PFSubclassing {
class func parseClassName() -> String! {
return "Event"
}
override class func load() {
registerSubclass()
}
}
收到编译错误,指出Event不符合PFSubclassing。
有什么建议吗?
答案 0 :(得分:2)
查看我的Parse Subclass生成器GSParseSchema。它可以为您生成Swift和Objective-C类。
在Swift中,你需要覆盖初始化函数。
override class func initialize() {
struct Static {
static var onceToken : dispatch_once_t = 0;
}
dispatch_once(&Static.onceToken) {
self.registerSubclass()
}
}
我发现这种自动注册并不总是有效,所以我也在我的AppDelegate中显式注册了子类。在使用setApplicationId:clientKey:
Event.registerSubclass()
答案 1 :(得分:1)
结帐this thread。以下是对问题的解释:
我已经为Parse打开了一个关于这一点的错误。基本上问题在于Parse头文件,其中PFSubclassing.h中的协议定义以这种方式定义此方法:+(instancetype)objectWithoutDataWithObjectId:(NSString)objectId;但是这样的方法是由PFObject + Subclass.h以这种方式实现的(注意区别:instancetype - &gt; id)+(id)objectWithoutDataWithObjectId:(NSString)objectId;这足以让斯威夫特抱怨。我找到的唯一解决方案是通过将“id”替换为“instancetype”来直接更改框架定义中的标头。如果这样做,代码将编译。
所以,这是你的解决方案,它对我有用;我遇到了同样的问题:
objectWithoutDataWithObjectId:
方法(id)objectWithoutDataWithObjectId:(NSString *)objectId;
答案 2 :(得分:-1)
对于最新版本的Parse 1.9.1和Swift 2.1,以下内容适用:
class Event:PFObject {// code}
示例如下所示:
class Event: PFObject {
// @NSManaged gives you autosuggest and type check
@NSManaged var var1: String?
@NSManaged var var2: String?
override class func initialize() {
struct Static {
static var onceToken : dispatch_once_t = 0;
}
dispatch_once(&Static.onceToken) {
self.registerSubclass()
}
}
}
我会尝试你的班级发电机,感觉我可以在那里节省很多时间。一直在研究将Swift对象映射到Parse的最佳方法。我从UML类图中构建了我的结构,并将Parse DB中设置的关系添加到图中。虽然它给了我我需要的东西,但不是最佳实践。
使用您的生成器,并将其设计为4层,第4层为Parse DB,层3-1为MVC,使用您的代码生成M,并使用UML类图中所需的逻辑。