【问题标题】:initialize swift class from objective c library从目标 c 库初始化 swift 类
【发布时间】:2017-11-10 06:49:05
【问题描述】:

您好,我目前正在将一个项目从目标 C 导入到 swift。目标 C 项目使用一个自定义库,该库在其中一个类中具有一个接受 Class 对象的函数,当加载数据时,它会使用类初始化一个 id obj(下面的代码)。在目标 C 方面,这很好用!我在 swift 上使用带有桥头的同一个库,但不幸的是,一旦加载数据,我的对象就为零。我验证了用于初始化对象的数据对象有内容。当我添加自定义 init() 时,自定义 swift 类还需要我实现一个 init(data: Data) 初始化程序,我是 swift 新手,任何帮助都会很棒!谢谢!

目标 C:

图书馆:

-(id) buildRetObject:(Class)clss fromData(NSData*) data{
id obj = nil;
if (data != nil) {
obj = [[clss alloc] initWithData:data];
}
}

自定义对象,是另一个自定义对象的子类,不在库中,而是在主应用程序中:

项目.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

}

【问题讨论】:

  • 你能发布一个更完整的例子吗? Swift 类定义是什么?
  • @Ssswift 我更新了我的帖子,如果有帮助请告诉我

标签: objective-c swift initialization init


【解决方案1】:

经过大量挖掘,我终于弄明白了,Objective C 从抽象类中知道初始化程序是什么,而 swift 不知道。所以我需要做的就是实现这个初始化程序并且它可以工作。

required init!(data: Data){
    super.init(data:Data)
}

override init(dictionary: [AnyHashable: Any]!){
    super.init(Dictionary:dictionary)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 2019-10-04
    • 2017-06-10
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多