LoginSignup
3
3

More than 5 years have passed since last update.

[Swift] PFObjectのサブクラス

Last updated at Posted at 2014-10-07

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のメソッドを呼び出すことで解決できました.

3
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3