1

我刚刚下载并尝试了 Parse。

一切都按预期工作,但我有一个关于良好子类化设计的问题。

默认情况下,标准 PFUser 具有三个字段。

  1. 用户名
  2. 电子邮件地址
  3. 密码

我想在 User 表中添加更多“列”。那些是:

  1. 电话(可选)
  2. 简介图片

下面是我的子类设计,但我不确定这是否是人们想要将其 PFUser 子类化的方式。

import UIKit

class GPUser: PFUser, PFSubclassing {
    var firstName: String? {
        didSet {
            self["firstName"] = firstName;
        }
    }
    var lastName: String? {
        didSet {
            self["lastName"] = lastName;
        }
    }
    var phone: String? {
        didSet {
            self["phone"] = phone;
        }
    }
    var profilePicture: PFFile? {
        didSet {
            self["profilePicture"] = profilePicture;
        }
    }
}

问题:

  1. 我想知道对 PFUser 进行子类化的最佳方法是什么(以便向其添加列),当然还有可能的最佳设计。你有什么设计想法吗?

  2. 我们是否应该重写 init 方法并实例化所有变量(名字、姓氏、电话等),以便在注册时创建可选字段列?

  3. 我应该摆脱那些 didSets 块吗?如果是的话,你能推荐一个更好的设计吗?

4

2 回答 2

3

在我看来,实现你想要的最简单的方法是使用存储@NSManaged属性:

class GPUser: PFUser, PFSubclassing {
    @NSManaged var firstName: String
    @NSManaged var lastName: String
    @NSManaged var phone: String
    @NSManaged var profilePicture: PFFile

    class func parseClassName() -> String! {
        return "YourParseClassName"
    }
}

不要忘记在以下位置注册您的自定义PFUser课程AppDelegate

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    GPUser.registerSubclass()
}
于 2015-05-26T12:20:42.850 回答
1

写一个扩展怎么样?

就像是:

extension PFUser {

    var picture:PFFile? {
        get {
            return self["picture"] as? PFFile
        }
        set {
            self["picture"] = newValue
        }
    }

    var name:String?{
        get {
            return self["name"] as? String
        }
        set {
            self["name"] = newValue
        }
    }

    var score:Int? {
        return self["score"] as? Int
    }
}
于 2015-05-26T14:25:59.040 回答