Objective-C如何调用Swift方法?

时间:2019-06-12 12:27:23

标签: objective-c swift abi name-mangling

通过添加项目的Swift伞头,Objective-C可以访问Swift类方法。 Objective-C如何能够调用Swift方法,但是C不能解决名称修改问题?

您能提供详细信息吗?


不是稳定的Swift ABI,编译器会为类型生成固定的错误名称吗?然后我们是否可以有一个程序来浏览Swift源代码并生成带有错误名称的标头,可以从C调用它?

2 个答案:

答案 0 :(得分:2)

通过@objc属性启用其编译器魔术。当将方法,协议,类或变量标记为@objc时,编译器实际上会生成带有适当的目标C选择器和名称的thunk或stub函数,以便可以由目标C运行时调用然后那个重击将调用底层的Swift函数。请注意,Swift调度和对象消息发送是两个完全不同的事物;它不仅是方法名称,还包括您查找函数指针(svift的v表,objc c的字符串选择器)并传递参数的方式。为了实现这一目标,编译器在后台做了很多工作,包括跨语言(NSString到String等)桥接参数。

答案 1 :(得分:-2)

在添加Objective-C函数时调用swift函数

@objc

函数的前面