在Swift中inheritancePFObject

用于在PFObject子类上添加属性和方法的Parse文档可方便地跳过其示例代码清单中的Swift语法,只是Objective-C语法:

https://parse.com/docs/ios_guide#subclasses-properties/iOS

// Armor.h @interface Armor : PFObject<PFSubclassing> + (NSString *)parseClassName; @property (retain) NSString *displayName; @end // Armor.m @dynamic displayName; 

有没有人想出了Swift缺乏dynamic合成器的工作,以便用PFSubclassing实现属性和方法? 我希望能够做到这样的事情:

 class Armor : PFObject, PFSubclassing { class func parseClassName() -> String! { return "Armor" } } var armor = Armor() armor.displayName = "Iron Clad" 

我有这个相同的问题。 必须添加@NSManaged到我想要保存的属性:

 class Armor : PFObject, PFSubclassing { @NSManaged var displayName: String class func parseClassName() -> String! { return "Armor" } } var armor = Armor.object() armor.displayName = "Iron Clad" 

希望这在下一次更新中得到解决。

解决scheme是使用计算的属性,而不是存储的属性:

 class Armor : PFObject, PFSubclassing { var displayName: String? { get { return self["displayName"] as? String } set { self["displayName"] = newValue } } class func parseClassName() -> String { return "Armor" } } 

Swift 1.2

首先 :创build一个swift文件并定义子类。 别忘了导入Parse! (例如护甲)

 import Foundation import Parse class Armor: PFObject, PFSubclassing { // MARK: - PFSubclassing override class func initialize() { struct Static { static var onceToken: dispatch_once_t = 0; } dispatch_once(&Static.onceToken) { self.registerSubclass() } } class func parseClassName() -> String { return "Armor" } // MARK: - Parse Core Properties @NSManaged var displayName: String? } 

注意 :您可以将您的属性定义为可选项。 parsing核心pipe理器内的每个“未定义”值将被转换为“nil”。

第二 :在AppDelegate.swift中注册所有的子类。

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Override point for customization after application launch. // MARK: - Parse Setup Parse.setApplicationId("YOUR_ID", clientKey: "YOUR_KEY") // MARK: - Parse Register Subclasses Armor.registerSubclass() return true } 

原型是正确的。 到现在为止,它将不能使用dynamic属性,但代码示例不包含registerSubclass Parsebuild议,所以代码应该包含它:

 class Armor : PFObject, PFSubclassing { @NSManaged var displayName: String override class func load() { self.registerSubclass() } class func parseClassName() -> String! { return "Armor" } } var armor = Armor.object() armor.displayName = "Iron Clad" 

(请注意,“覆盖”是必需的,但从parsing文档中缺less。)

我遇到了同样的问题,但我应该注意到,你的类定义应该看起来更像这样:

 class Armor : PFObject, PFSubclassing { var displayName: String class func parseClassName() -> String! { return "Armor" } } var armor = Armor() armor.displayName = "Iron Clad" 

我尝试了一些不同的东西,但没有成功。 看起来Parse SDK不支持这个function,请记住,Parse iOS SDK的当前版本早于快速公告。 听起来他们正在为即将发布的版本提供更好的快速支持。

相反,您仍可以创buildPFObject子类(如您所做的那样)并使用.getObjectForKey("displayName")访问数据,或者编写自己的类方法来访问这些数据。 最大的缺点是SDK通常为您创build一些便利的方法。