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 项目。
我将两个工件都放入我的项目中并检查:
[常规 - 框架、库。和嵌入的内容]库是否被识别
库是否在[Build Phases - Link Binary With Libraries]
中被识别
检查[构建设置 - 库搜索路径]地址
定义模块 - 是
然后我输入'@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。
如果您参考下面的地址,您可以提前避免发生的错误。
我正在尝试创建一个 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' 文件夹。
但问题是 Objective-C 项目。
我将两个工件都放入我的项目中并检查:
[常规 - 框架、库。和嵌入的内容]库是否被识别
库是否在[Build Phases - Link Binary With Libraries]
中被识别检查[构建设置 - 库搜索路径]地址
定义模块 - 是
然后我输入'@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。
如果您参考下面的地址,您可以提前避免发生的错误。