通过添加项目的Swift伞头,Objective-C可以访问Swift类方法。 Objective-C如何能够调用Swift方法,但是C不能解决名称修改问题?
您能提供详细信息吗?
不是稳定的Swift ABI,编译器会为类型生成固定的错误名称吗?然后我们是否可以有一个程序来浏览Swift源代码并生成带有错误名称的标头,可以从C调用它?
答案 0 :(得分:2)
通过@objc
属性启用其编译器魔术。当将方法,协议,类或变量标记为@objc
时,编译器实际上会生成带有适当的目标C选择器和名称的thunk或stub函数,以便可以由目标C运行时调用然后那个重击将调用底层的Swift函数。请注意,Swift调度和对象消息发送是两个完全不同的事物;它不仅是方法名称,还包括您查找函数指针(svift的v表,objc c的字符串选择器)并传递参数的方式。为了实现这一目标,编译器在后台做了很多工作,包括跨语言(NSString到String等)桥接参数。
答案 1 :(得分:-2)
在添加Objective-C函数时调用swift函数
@objc
函数的前面