[英]Subclassing PFObject in Swift
用於在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缺乏動態合成器的工作,以便用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"
希望這在下次更新中得到解決。
解決方案是使用計算屬性而不是存儲屬性:
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
第一步 :創建一個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?
}
注意 :您可以將屬性定義為選項。 Parse Core Manager中的每個“未定義”值都將轉換為“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
}
原型是正確的。 截至目前,它不適用於動態屬性,但代碼示例不包含registerSubclass Parse建議,因此代碼應包含如下:
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"
(請注意,“覆蓋”是必需的,但在Parse文檔中缺失。)
我遇到了同樣的問題,但我應該注意你的類定義看起來應該更像這樣:
class Armor : PFObject, PFSubclassing {
var displayName: String
class func parseClassName() -> String! {
return "Armor"
}
}
var armor = Armor()
armor.displayName = "Iron Clad"
我嘗試了一些不同的事情而沒有成功。 它看起來不像Parse SDK支持這一點,請記住,Parse iOS SDK的當前版本早於swift公告。 聽起來他們正在努力為即將發布的版本提供更好的快速支持。
相反,您仍然可以創建PFObject子類(如您所做)並使用.getObjectForKey("displayName")
訪問數據,或編寫您自己的類方法來訪問此數據。 最缺少的部分實際上只是SDK通常為您創建的一些便捷方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.