1

我有

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 verify] 在 ObjCExample.o ld 中:未找到架构 arm64 的符号

与导出的其他函数相同,但如果我可以将闭包映射到块或其他任何东西,我肯定会修复其余的 :^)

已解决:将全局变量转换为类 func()s

4

1 回答 1

4

您不能访问在 Objective-C 代码中在全局范围内声明的 Swift 函数。根据文档

@objc只要与 Objective-C 兼容,您就可以访问标有该属性的类或协议中的任何内容。这不包括仅 Swift 的功能,例如此处列出的功能:

  • 泛型
  • 元组
  • Swift 中定义的枚举
  • Swift 中定义的结构
  • Swift 中定义的顶级函数
  • Swift 中定义的全局变量
  • Swift 中定义的类型别名
  • Swift 风格的可变参数
  • 嵌套类型

包括 FOUNDATION_EXPORT ...在你的伞头中只公开函数的定义,符号本身没有移植到Objective-C。

于 2014-06-05T15:41:38.243 回答