首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Swift中将PFObject子类化

在Swift中将PFObject子类化
EN

Stack Overflow用户
提问于 2014-07-05 08:38:00
回答 5查看 8.7K关注 0票数 16

用于在PFObject子类上添加属性和方法的解析文档很方便地跳过了仅列出Objective-C语法的示例代码中的Swift语法:

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

代码语言:javascript
复制
// Armor.h
@interface Armor : PFObject<PFSubclassing>
+ (NSString *)parseClassName;
@property (retain) NSString *displayName;
@end

// Armor.m
@dynamic displayName;

有没有人想出一个办法来解决Swift缺乏动态合成器的问题,以便用PFSubclassing实现属性和方法?我希望能够做这样的事情:

代码语言:javascript
复制
class Armor : PFObject, PFSubclassing {
    class func parseClassName() -> String! {
        return "Armor"
    }
}

var armor = Armor()
armor.displayName = "Iron Clad"
EN

回答 5

Stack Overflow用户

发布于 2014-07-09 13:58:47

我也有同样的问题。我不得不将@NSManaged添加到我想要保存的属性中:

代码语言:javascript
复制
class Armor : PFObject, PFSubclassing {
    @NSManaged var displayName: String

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

var armor = Armor.object()
armor.displayName = "Iron Clad"

希望这个问题能在下一个更新中得到解决。

票数 22
EN

Stack Overflow用户

发布于 2014-09-17 21:48:04

解决方案是使用计算属性而不是存储属性:

代码语言:javascript
复制
class Armor : PFObject, PFSubclassing {

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


    class func parseClassName() -> String {
        return "Armor"
    }
}
票数 15
EN

Stack Overflow用户

发布于 2015-08-07 21:03:47

Swift 1.2

First:创建swift文件并定义子类。别忘了导入Parse!(例如Armor)

代码语言:javascript
复制
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.中注册所有子类

代码语言:javascript
复制
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
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24581981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档