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

时间:2016-03-29 09:39:29

标签: objective-c swift nscoding

我的objective-c项目中集成了一个swift类,它返回一个我可以访问和使用的对象。我已经尝试(在obj-c文件中)使用此对象创建属性并使用标准方法对其进行编码/解码

- (void)encodeWithCoder:(NSCoder *)encoder

- (id)initWithCoder:(NSCoder *)decoder

但是我的应用程序崩溃了“无法识别的选择器发送到实例XXX”。

我想我无法以这种方式直接序列化swift对象,我现在也不知道如何解决。谢谢你的帮助

2 个答案:

答案 0 :(得分:1)

为了实现这一点,你必须:

a)在Swift类中编写encodeWithCoder方法集

-OR -

b)继承来自

的Obj-C类

(b)让我感到困惑,直到简单的事实变得清晰:Swift对象从NSObject下降,所以你期望的很多机器都不存在,包括整个coder系统。当您更改时,可以使用相当多的功能:

class myClass {

class myClass: NSObject {

答案 1 :(得分:0)

这是一个简单的类swift。您可以将此作为示例。我希望我们可以帮到你。

    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")

    }  
  }