导出 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];
  1. 您需要使用 [[YourClass alloc] init] 才能正常工作
  2. 在Xcode项目中,需要启用Always embed Swift standard libraries
  3. 使用 Generic iOS Device 构建不会生成通用框架