解析 - 使用Swift进行子类化?

时间:2014-07-22 22:21:40

标签: swift parse-platform

我正在尝试使用标准子类来使用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。

有什么建议吗?

3 个答案:

答案 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:

初始化Parse之前,请务必注册
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”来直接更改框架定义中的标头。如果这样做,代码将编译。

所以,这是你的解决方案,它对我有用;我遇到了同样的问题:

  • 打开PFSubclassing.h(请注意,这是Parse目录下的PFSubclassing.h)
  • 找到objectWithoutDataWithObjectId:方法
  • 将方法签名替换为:(id)objectWithoutDataWithObjectId:(NSString *)objectId;

答案 2 :(得分:-1)

对于最新版本的Parse 1.9.1和Swift 2.1,以下内容适用:

  • 无需显示该类符合协议PFSubclassing,以下就足够了

class Event:PFObject {// code}

  • 如果您使用pod,那么您不需要包含Parse,PFSubclassing到处

示例如下所示:

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类图中所需的逻辑。