Parseで使うPFObjectのサブクラス化について.
オフィシャルのiOSガイドのサブクラスの項にあるように、Objective-C同様、PFObjectのサブクラスは、PFSubclassing
というプロトコルを実装して、registerSubclass()
というクラスメソッドを呼ぶことと、parseClassName()
という同じくクラスメソッドで、DB上に保存される名前を返してあげることが必要.
class Armor : PFObject, PFSubclassing {
class func load() {
self.registerSubclass()
}
class func parseClassName() -> String! {
return "Armor"
}
}
であとはプロパティの扱いですが、Objective-Cでは、@dynamic
なプロパティとして宣言することで、あとはランタイムにsuperclassすなわちPFObjectがよろしくやってくれるという仕組みになっていました.
// Armor.h
@interface Armor : PFObject<PFSubclassing>
+ (NSString *)parseClassName;
@property (retain) NSString *displayName;
@end
// Armor.m
@dynamic displayName;
それに相当するSwiftでの書き方が分からずに苦戦しました。上記のドキュメントでもその部分はSwiftの記述がありません。それでとりあえず、考えたのは、Computated Property (日本語でなんて訳されてるんだろう) を使う方法
上記の例だと、
class Armor : PFObject, PFSubclassing {
var displayName: String {
get {
return objectForKey("displayName") as String
}
set {
setObject(newValue, forKey: "displayName")
}
}
}
で objectForKey() setObject()
という PFObjectのメソッドを呼び出すことで解決できました.