ios swift parse.com subclassing

ios - Subclasificación de PFObject en Swift



parse.com subclassing (5)

La documentación de Parse para agregar propiedades y métodos en las subclases de PFObject omite convenientemente la sintaxis de Swift en su código de ejemplo listando solo la sintaxis de 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;

¿Alguien ha encontrado una solución para la falta de sintetizadores dinámicos de Swift para implementar propiedades y métodos con PFSubclassing? Quiero ser capaz de hacer algo como:

class Armor : PFObject, PFSubclassing { class func parseClassName() -> String! { return "Armor" } } var armor = Armor() armor.displayName = "Iron Clad"


Me encontré con el mismo problema, aunque debería tener en cuenta que la definición de su clase debería verse más como esto:

class Armor : PFObject, PFSubclassing { var displayName: String class func parseClassName() -> String! { return "Armor" } } var armor = Armor() armor.displayName = "Iron Clad"

Probé algunas cosas diferentes sin éxito. No parece que Parse SDK lo admita, tenga en cuenta que el lanzamiento actual del SDK de iOS de Parse es anterior al anuncio rápido. Aunque parece que están trabajando en una mejor compatibilidad para una próxima versión.

En su lugar, puede crear subclases PFObject (como lo hizo) y acceder a los datos con .getObjectForKey("displayName") , o escribir sus propios métodos de clase para acceder a estos datos. La pieza que falta más grande es realmente solo algunos métodos de conveniencia que el SDK generalmente crea para usted.


Yo tuve el mísmo problema. Tuve que agregar @NSManaged a las propiedades que quería guardar:

class Armor : PFObject, PFSubclassing { @NSManaged var displayName: String class func parseClassName() -> String! { return "Armor" } } var armor = Armor.object() armor.displayName = "Iron Clad"

Espero que esto se resuelva en la próxima actualización.


Prototypic es correcto. A partir de ahora, no funcionará con el atributo dinámico, pero el ejemplo del código no incluye el registro que recomienda Subsecreto, por lo que el código debería incluirlo así:

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"

(Tenga en cuenta que se requiere "anular" pero falta en la documentación de Parse).


La solución es usar propiedades calculadas en lugar de propiedades almacenadas:

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

Primero : cree un archivo rápido y defina la subclase. ¡No te olvides de importar Parse! (por ejemplo Armadura)

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? }

Nota : Puede definir sus propiedades como opcionales. Cada valor "indefinido" dentro de Parse Core Manager se traducirá a "nil".

Segundo : Registre todas las subclases, dentro de su 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 }