将 swift 框架导入 objective-c 项目

importing swift framework into a objective-c project

我正在将 swift 框架导入到 objective-c 项目中,如下所示:

@import MyFramework;

问题是只有部分 class 被我正在导入框架的 class 识别。

被识别的class:

public class RecognizedClass:UIViewController, WKNavigationDelegate, WKScriptMessageHandle 
 { ... } 

class 不是:

public class VeediUtils
{ ... } 

它们都是 public 那么为什么第一个在工作区中被识别而另一个不被识别?

我还在头文件 MyFramework-Swift.h 中看到 class

@interface RecognizedClass : UIViewController <WKNavigationDelegate, WKScriptMessageHandler>

出现而另一个不出现

这是为什么?

还要指出的是,当我将 swift 框架导入到 swift 项目

时,同样的程序也有效

要访问 objc 中的 swift class,它不是从 NSObject 继承的,您需要:

@objc public class VeediUtils

A Swift class or protocol must be marked with the @objc attribute to be accessible and usable in Objective-C. This attribute tells the compiler that this piece of Swift code can be accessed from Objective-C. If your Swift class is a descendant of an Objective-C class, the compiler automatically adds the @objc attribute for you.

https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

您必须将 @objc 添加到 VeediUtils class 的声明中,或者使其继承自 NSObject。否则 Objective-C.

将看不到它

在你的例子中,RecognizedClass 被识别是因为它是 UIViewController 的子class,NSObject 的子class。

如果您之前配置 Project 以与 Swift 集成并希望使用 Swift Dynamic Framework,则必须像这样导入它(根据您的项目将 {value} 替换为适当的名称):

#import <{MyFramework}/{MyFrameworkMainClass}-Swift.h>  
#import "{YourProjectTargetName}-Swift.h"

编辑:

如果您的框架将 Defines Module 设置为 true,那么您可以像这样导入它:

@import MyFramework;

在Objective-C

中使用Swift类

如果您要在 App Target 中导入代码(在一个项目中混合 Objective-C 和 Swift),您应该使用下一个导入行 #import "<#YourProjectName#>-Swift.h" 公开 Swift代码到Objective-C代码[Mixing Swift and Objective-C code in a project]

在此post中,我将描述如何将Swift框架导入Objective-C代码

Objective-C 消费者 -> Swift 动态框架

Xcode 版本 10.2.1

创建一个Swift框架

关注Create Swift framework

公开SwiftAPI。使用 Objective-C

中 Swift 的功能

Objective-C消费者

关注Using Swift framework

将模块导入到 Objective-C 客户端代码

@import module_name;

[More examples here]