将 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.
您必须将 @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]
我正在将 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.
您必须将 @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
Objective-C消费者
关注Using Swift framework
将模块导入到 Objective-C 客户端代码
@import module_name;
[More examples here]