Search code examples
swiftparse-platformcastingpfuser

PFUser to custom model


I have a model I built for my PFUser from Parse:

import Foundation
import Parse

class TradeUser : PFUser {

override class func initialize() {
    self.registerSubclass()
}

var userID : String {
    get {return objectForKey("objectId") as! String}
    set { setObject(newValue, forKey: "objectId") }
}

var emailAddress : String {
    get {return objectForKey("email") as! String}
    set { setObject(newValue, forKey: "email") }
}

var firstName : String {
    get {return objectForKey("firstName") as! String}
    set {setObject(newValue, forKey: "firstName")}
}

var lastName : String {
    get {return objectForKey("lastName") as! String}
    set {setObject(newValue, forKey: "lastName")}
}

var primaryQueue : String {
    get {return objectForKey("primaryQueue") as! String}
    set {setObject(newValue, forKey: "primaryQueue")}
}

var image : PFFile {
    get { return self["profileImage"] as! PFFile }
    set { self["profileImage"] = newValue }
}
}

But when I query to get a user, and try to cast it as that, I get a "Could not cast value of type 'PFUser' (0x107555928) to 'ShiftSwap.TradeUser' (0x10754e910)."

I thought that TradeUser would be the same value type as PFUser, since it is a PFUser cast? I'm a little confused, and any clarification would be appreciated!

EDIT:

@IBAction func chatBarButton(sender: AnyObject) {

    let postingUser = self.object?.objectForKey("userID") as! String

    let tradeUserQuery = PFUser.query()
    tradeUserQuery?.whereKey("objectId", equalTo: postingUser)
    let trader = tradeUserQuery?.getFirstObject() as! TradeUser

    var chatVC = MessagesViewController()

    chatVC.currentUser = TradeUser.currentUser()
    print(TradeUser.currentUser())
    chatVC.otherUser = trader

    self.navigationController?.pushViewController(chatVC, animated: true)

}

Solution

  • You are forcing a downcast which is impossible. You cannot downcast an instance of a base class PFUser to a derived one TradeUser.