在 Objective-c 项目中编码 Swift 对象

Encode Swift object in Objective-c project

我有一个 swift class 集成在我的 objective-c 项目中,它 returns 我可以访问和使用的对象。我已经尝试(在 obj-c 文件中)用这个对象创建一个 属性 并使用标准方法 encode/decode 它

- (void)encodeWithCoder:(NSCoder *)encoder

- (id)initWithCoder:(NSCoder *)decoder

但是我的应用程序崩溃 "unrecognized selector sent to instance XXX"。

我想我不能用这种直接的方式序列化swift个对象,我现在不知道如何解决。感谢您的帮助

为了使它起作用,您必须:

a) 在你的 Swift class

中编写一组 encodeWithCoder 方法

-或-

b) 从 Obj-C class 继承

(b) 让我感到困惑,直到简单的事实变得清晰起来:Swift 对象确实 不是 NSObject 的后代,所以很多你期望的机制只是在那里,这包括整个 coder 系统。当您更改时,可以使用相当多的功能:

class myClass {

class myClass: NSObject {

这是一个简单的classswift。你可以以此为例。希望我们能对您有所帮助。

    class UserBean:NSObject,NSCoding {

    var idUser:NSNumber?
    var username:String?
    var password:String?
    var email:String?
    var token:String?
    var fonte:String?
    var idFacebook:String?
    var uuid:String?
    var profilo = UserProfileBean()

    override init() {
        super.init()
        self.profilo = UserProfileBean()
    }

    required init?(coder aDecoder: NSCoder) {
        idUser      = aDecoder.decodeObjectForKey("idUser") as? NSNumber
        username    = aDecoder.decodeObjectForKey("username") as? String
        password    = aDecoder.decodeObjectForKey("password") as? String
        email       = aDecoder.decodeObjectForKey("email") as? String
        token       = aDecoder.decodeObjectForKey("token") as? String
        fonte       = aDecoder.decodeObjectForKey("fonte") as? String
        idFacebook  = aDecoder.decodeObjectForKey("idFacebook") as? String
        uuid        = (aDecoder.decodeObjectForKey("uuid") as? String)!
        profilo     = (aDecoder.decodeObjectForKey("profilo") as? UserProfileBean)!

    }
    func encodeWithCoder(aCoder: NSCoder) {
        aCoder.encodeObject(idUser,     forKey: "idUser")
        aCoder.encodeObject(username,   forKey: "username")
        aCoder.encodeObject(password,   forKey: "password")
        aCoder.encodeObject(email,      forKey: "email")
        aCoder.encodeObject(token,      forKey: "token")
        aCoder.encodeObject(fonte,      forKey: "fonte")
        aCoder.encodeObject(idFacebook ,forKey: "idFacebook")
        aCoder.encodeObject(uuid ,forKey: "idFacebook")
        aCoder.encodeObject(profilo,forKey: "profilo")

    }  
  }