您好我正在将目标C中的项目导入swift。目标C项目使用一个自定义库,在其中一个类中,它有一个带有Class对象的函数,当加载数据时,它会用类初始化一个id obj(下面的代码)。在目标C方面,这很有效!我在swift上使用与桥头相同的库,但不幸的是,一旦数据加载,我的对象就是nil。我验证了用于初始化对象的数据对象有内容。自定义swift类还要求我在添加自定义init()时实现init(data:Data)初始化程序,我是swift的新手,任何帮助都会很棒!谢谢!
目标C:
库:
-(id) buildRetObject:(Class)clss fromData(NSData*) data{
id obj = nil;
if (data != nil) {
obj = [[clss alloc] initWithData:data];
}
}
自定义对象,是另一个自定义对象的子类,不在库中,而是在主应用程序上:
Item.m:
-(id)init{
if ([super init]){
//do something
}
return self
}
swift中的相同Item对象:
//customClass super class is abstactCustomClass which is a sub abstract class of NSObject class, init functions are in here, the abstract class
class Item: customClass {
//variables
override init() {
super.init()
// do something
}
required init!(data: Data){
//fatalError(message here)
/*tried calling supers method
super.init(data:Data) gives error: fatal error: use of unimplemented initializer 'init(dictionary:)'*/
}
//methods
}
答案 0 :(得分:0)
经过大量的挖掘后,我终于弄明白了,客观的C从抽象类中知道初始化器是什么,swift并不是。所以我需要做的就是实现这个初始化器并且它可以工作。
required init!(data: Data){
super.init(data:Data)
}
override init(dictionary: [AnyHashable: Any]!){
super.init(Dictionary:dictionary)
}