我有
func verifyEmail(let email: String, let completionHandler:(Bool) -> Void) -> Bool
{
在我的(快速)框架中
将其公开为
FOUNDATION_EXPORT BOOL verifyEmail(NSString *email, void (^completionHandler)(BOOL verificationResult));
在我的框架伞标题
中试图像这样打电话
verifyEmail(@"dfs", ^(BOOL verificationResult) {
NSLog(@"objc: using sdk v%f", whateverSdkVersionNumber);
});
目标c示例代码中的导致链接错误: 架构arm64的未定义符号: “_verifyEmail”,引自: - ObjCExample.o中的[ObjCExample verify] ld:找不到架构arm64的符号
与导出的其他函数相同但是如果我可以映射闭包 阻止或其他什么我肯定会解决其余问题:^)
已解决:转换后的全局变量到类func()s
答案 0 :(得分:4)
您无法在Objective-C代码中访问在全局范围内声明的Swift函数。每documentation:
只要与Objective-C兼容,您就可以访问标有
@objc
属性的类或协议中的任何内容。这不包括仅限Swift的功能,例如此处列出的功能:
- 泛型
- 元组
- Swift中定义的枚举
- Swift中定义的结构
- Swift中定义的顶级函数
- Swift中定义的全局变量
- Swift中定义的Typealiases
- Swift式variadics
- 嵌套类型
在您的伞形标题中包含FOUNDATION_EXPORT ...
仅显示函数的定义,符号本身不会移植到Objective-C。