我的objective-c项目中集成了一个swift类,它返回一个我可以访问和使用的对象。我已经尝试(在obj-c文件中)使用此对象创建属性并使用标准方法对其进行编码/解码
- (void)encodeWithCoder:(NSCoder *)encoder
和
- (id)initWithCoder:(NSCoder *)decoder
但是我的应用程序崩溃了“无法识别的选择器发送到实例XXX”。
我想我无法以这种方式直接序列化swift对象,我现在也不知道如何解决。谢谢你的帮助
答案 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")
}
}