class 消息的接收者“**”是前向声明错误。 Swift 在 Objective-C 中使用静态库

Receiver '**' for class message is a forward declaration Error. Swift Static Library use in Objective-C

我正在尝试创建一个 Swift 静态库并将其应用于 Swift 和 Objective 项目。

import Foundation

@objc open class Library001_Test: NSObject {
   public override init(){}

   @objc public func testPrint() {
      print("My Name is Andi")
   }

   @objc public func getUUID(userName: String) -> String {
      let uuid = UUID().uuidString
      return "\(userName)'s UUID : \(uuid)"
   }
}

我使用 Swift 编写了这样的代码。

然后在编辑方案菜单中,我将构建配置更改为发布并继续 运行。结果,创建了 'libLibrary001.a' 文件和 'Library001.swiftmodule' 文件夹。

这两个工件在粘贴到 Swift 项目并导入时效果很好。

但问题是 Objective-C 项目。

我将两个工件都放入我的项目中并检查:

  1. [常规 - 框架、库。和嵌入的内容]库是否被识别

  2. 库是否在[Build Phases - Link Binary With Libraries]

    中被识别
  3. 检查[构建设置 - 库搜索路径]地址

  4. 定义模块 - 是

然后我输入'@class Library001_Test;'在 ViewController.h

#import <UIKit/UIKit.h>

@class Library001_Test;

@interface ViewController : UIViewController
@end

并且在ViewController.m中加载了'#import "ProductName-Swift.h"和创建的Class。

#import "ViewController.h"
#import "SwiftInObjectiveC-Swift.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    Library001_Test *test = [[Library001_Test alloc] init];
}
@end

错误:class 消息的接收者 'Library001_Test' 是前向声明

错误:接收者类型 'Library001_Test' 例如消息是前向声明

执行此操作时出错。网上的方法都试过了,不知道问题出在哪里

代码有问题吗?是我没设置好吗??

在项目中创建的 Swift 文件在 Objective-C 中导入得很好...为什么 .a 文件不能像这样工作?

我的问题是“(ProductName)-Swift.h”

如果您查看 Swift 代码在 Objective-C 中的使用方式,很多文章都说要导入 (ProductName)-Swift.h。所以我只添加了我要申请的项目头,但是我还需要添加从库中制作的产品头。

我的问题很简单,但我花了很长时间才弄明白。在Swift 静态库中找不到'Class' 和'func' 的错误。我的解决方法是使用我创建的库的 (LibraryProductName)-Swift.h,而不是您正在处理的项目的 (ProductName)-Swift.h。

如果您参考下面的地址,您可以提前避免发生的错误。

https://medium.com/@mail2ashislaha/swift-objective-c-interoperability-static-libraries-modulemap-etc-39caa77ce1fc