导出 Swift 框架以用于 Objective-C
Export Swift framework for the usage in Objective-C
我正在使用 Swift 创建一个框架,用于我大学的 Objective-C 项目。我创建了一个新项目并选择了 Cocoa Touch Framework 并将其命名为 printFramework。我已经使用以下代码将 Swift 文件添加到项目中:
import Foundation
@objc public class printClass : NSObject {
@objc public override init() {
print("My name is init")
}
@objc public func printMe(){
print("Hello Wrold")
}
}
我用目标 Generic iOS Device 构建了上面的代码(Build Success),现在我有一个公文包(框架)文件,在 Product 下,
我创建了另一个 Single View Application 项目,语言 Objective-C 名为 prinFrameTest。我将框架复制到项目中,并在 Linked Frameworks and Libraries 下的 General 选项卡中,我有我的 printFramwork 以及在 Embedded Binaries 之上我添加了我的 printFramework.
在我的 ViewController.m
中,我有以下代码:
#import "ViewController.h"
@import printFramework;
#import <printFramework/printFramework-Swift.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
printClass *pr;
[pr printMe];
}
@end
我构建并 运行 这个(它 运行 成功),模拟器打开但代码不工作(意味着它不在日志中打印任何内容)。
出了什么问题?
您也需要创建一个非 nil 对象
printClass *pr = [printClass new];
或
printClass *pr = [[printClass alloc] init];
如果您在行 [pr printMe]
上放置一个断点并检查 pr
的值,您可能会看到它是一个空引用 - 您还没有创建对象,您'我们刚刚分配了一个变量,它可以保存对 printClass
实例的引用。试试这个方法:
[[printClass new] printMe];
- 您需要使用
[[YourClass alloc] init]
才能正常工作
- 在Xcode项目中,需要启用
Always embed Swift standard libraries
- 使用
Generic iOS Device
构建不会生成通用框架
我正在使用 Swift 创建一个框架,用于我大学的 Objective-C 项目。我创建了一个新项目并选择了 Cocoa Touch Framework 并将其命名为 printFramework。我已经使用以下代码将 Swift 文件添加到项目中:
import Foundation
@objc public class printClass : NSObject {
@objc public override init() {
print("My name is init")
}
@objc public func printMe(){
print("Hello Wrold")
}
}
我用目标 Generic iOS Device 构建了上面的代码(Build Success),现在我有一个公文包(框架)文件,在 Product 下, 我创建了另一个 Single View Application 项目,语言 Objective-C 名为 prinFrameTest。我将框架复制到项目中,并在 Linked Frameworks and Libraries 下的 General 选项卡中,我有我的 printFramwork 以及在 Embedded Binaries 之上我添加了我的 printFramework.
在我的 ViewController.m
中,我有以下代码:
#import "ViewController.h"
@import printFramework;
#import <printFramework/printFramework-Swift.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
printClass *pr;
[pr printMe];
}
@end
我构建并 运行 这个(它 运行 成功),模拟器打开但代码不工作(意味着它不在日志中打印任何内容)。
出了什么问题?
您也需要创建一个非 nil 对象
printClass *pr = [printClass new];
或
printClass *pr = [[printClass alloc] init];
如果您在行 [pr printMe]
上放置一个断点并检查 pr
的值,您可能会看到它是一个空引用 - 您还没有创建对象,您'我们刚刚分配了一个变量,它可以保存对 printClass
实例的引用。试试这个方法:
[[printClass new] printMe];
- 您需要使用
[[YourClass alloc] init]
才能正常工作 - 在Xcode项目中,需要启用
Always embed Swift standard libraries
- 使用
Generic iOS Device
构建不会生成通用框架