从 Swift 调用 Objective C 自定义初始化函数
Posted
技术标签:
【中文标题】从 Swift 调用 Objective C 自定义初始化函数【英文标题】:Call Objective C custom init function from Swift 【发布时间】:2018-08-13 12:50:33 【问题描述】:A 类是用 Objective C 编写的,并且有一个自定义的初始化函数
@interface A ()
....
@end
@implementation A
- (id)customInitImplementedInA
...
return self;
B 类继承自 A 类,并以下列方式使用此自定义初始化:
@interface B : A ()
....
@end
@implementation B
+(instancetype)instanceB
B *b = [[B alloc] customInitImplementedInA];
...
return b;
现在我想创建一个用 Swift 编写的 C 类,它继承自 A 并使用相同的 init 函数。我怎么做?
class C: A
//How do I use customInitImplementedInA here?
【问题讨论】:
在你实际的customInitImplementedInA
中,方法名以init
开头?
@OOPer 是的
那么没问题。
@OOPer 那么答案是什么?
只有一个参数?你为什么不在你的问题中写下实际姓名?使用伪名称使其变得复杂。
【参考方案1】:
您应该可以通过super.methodname
语法来做到这一点。
class C: A
init()
super.customInitImplementedInA()
// Any extra initialization for C goes here.
【讨论】:
覆盖错误:初始化程序没有覆盖其超类中的指定初始化程序。删除它并收到 customInitImplementedInA 错误:“A”类型的值没有成员“customInitImplementedInA” 我的错误。如果 A 类没有基本 init,则不需要覆盖。 customInitImplementedInA 是通过接口公开还是私有的?如果它是私有的,您将无法访问它。 确实是通过接口暴露出来的。无法想象为什么会出现这个错误 customInit 是否有参数,您是否使用正确的快速语法调用初始化程序?当你做超级。自动完成是否提供与 A 类方法相关的任何内容?【参考方案2】:如果你从 Obj-C 继承你的 swift 类,那么你的 swift 类将拥有 obj-c init()。 如果你需要调用它,你可以将它包含在你的 swift init 中。
class C: A
var message: B?
init(message: B)
super.customInitImplementedInA()
self.message = message
【讨论】:
什么是 var 消息:B? 它只是您自定义初始化的示例。您的 C 类中可以有任何 var。以上是关于从 Swift 调用 Objective C 自定义初始化函数的主要内容,如果未能解决你的问题,请参考以下文章
从 Objective C 调用 Swift 中定义的 NSString 扩展
从 Swift 调用 Objective C 自定义初始化函数