Back4app - Swift - 将 PFObject 转换为 Class

Back4app - Swift - Cast PFObject to Class

我正在尝试 cast PFObjectSwift 中的 custom class 我读了很多关于它的 post然后我需要从 PFObject 继承我的 class。问题是我的 class 已经继承自 NSObject 并且两者之间存在冲突。

还有其他方法可以将 PFObject 转换为 custom class 吗?

Usuario.swift

class Usuario: NSObject, NSCoding {

    //MARK: Propriedades
    var nome: String?
    var foto: String?
    var dataNascimento: Date?
    var numeroTelefone: String?
    var pais: PaisCodigo?
    var telefoneE164: String?

    var objectId: String?
    var created: Date?
    var updated: Date?

    override init() {}

    required init(coder aDecoder: NSCoder) {

        nome = aDecoder.decodeObject(forKey: "nome") as? String
        foto = aDecoder.decodeObject(forKey: "foto") as? String
        dataNascimento = aDecoder.decodeObject(forKey: "dataNascimento") as? Date
        numeroTelefone = aDecoder.decodeObject(forKey: "numeroTelefone") as? String
        pais = aDecoder.decodeObject(forKey: "pais") as? PaisCodigo
        telefoneE164 = aDecoder.decodeObject(forKey: "telefoneE164") as? String

        objectId = aDecoder.decodeObject(forKey: "objectId") as? String
        created = aDecoder.decodeObject(forKey: "created") as? Date
        updated = aDecoder.decodeObject(forKey: "updated") as? Date
    }

    func encode(with aCoder: NSCoder) {

        if let nomeUsuario = nome {
            aCoder.encode(nomeUsuario, forKey: "nome")
        }

        if let fotoUsuario = foto {
            aCoder.encode(fotoUsuario, forKey: "foto")
        }

        if let dataNascimentoUsuario = dataNascimento {
            aCoder.encode(dataNascimentoUsuario, forKey: "dataNascimento")
        }

        if let numeroTelefoneUsuario = numeroTelefone {
            aCoder.encode(numeroTelefoneUsuario, forKey: "numeroTelefone")
        }

        if let paisUsuario = pais {
            aCoder.encode(paisUsuario, forKey: "pais")
        }

        if let telefoneE164Usuario = telefoneE164 {
            aCoder.encode(telefoneE164Usuario, forKey: "telefoneE164")
        }

        if let objectIdUsuario = objectId {
            aCoder.encode(objectIdUsuario, forKey: "objectId")
        }

        if let createdUsuario = created {
            aCoder.encode(createdUsuario, forKey: "created")
        }

        if let updatedUsuario = updated {
            aCoder.encode(updatedUsuario, forKey: "updated")
        }
    }
}

使用 objectId 的解析结果 returns 我这个结果:

<Usuario: 0x6080000abb20, objectId: 7NwpmD81w3, localId: (null)> {
    nome = "Pablo Cavalcante";
    numeroTelefone = 67992497386;
    pais = "<PaisCodigo: 0x6080000abb80, objectId: rA5wdIWEFt, localId: (null)>";
    telefoneE164 = "+5567992497386"; }

所以它 returns 是一个 Usuario 对象,我需要转换它。

您可以使用 PFSubclassing。我看到你正在声明一个用户 class 所以你可以只 subclass PFUser 然后写这样的东西:

class User: PFUser, PFSubclassing {

    //MARK: Propriedades
    dynamic var nome: String?
    dynamic var foto: String?
    dynamic var dataNascimento: Date?
    dynamic var numeroTelefone: String?
    dynamic var pais: PaisCodigo?
    dynamic var telefoneE164: String?
    dynamic var objectId: String?
    dynamic var created: Date?
    dynamic var updated: Date?

}

当然,如果您使用 init(with:)encode(with:),则必须实施它...