[英]importing swift framework into a objective-c project
我正在将 swift 框架导入到 Objective-C 项目中,如下所示:
@import MyFramework;
问题是我正在导入框架的类只能识别一些类。
被识别的类:
public class RecognizedClass:UIViewController, WKNavigationDelegate, WKScriptMessageHandle
{ ... }
不是的类:
public class VeediUtils
{ ... }
它们都是公开的,那么为什么第一个在工作区中被识别而另一个没有?
我还在头文件 MyFramework-Swift.h 中看到一个类
@interface RecognizedClass : UIViewController <WKNavigationDelegate, WKScriptMessageHandler>
出现而另一个不出现
这是为什么?
还要指出,当我将 swift 框架导入 swift 项目时,同样的程序也能工作
如果您之前将 Project 配置为与 Swift 集成并希望使用 Swift 动态框架,则必须以这种方式导入它(根据您的项目将 {value} 替换为适当的名称):
#import <{MyFramework}/{MyFrameworkMainClass}-Swift.h>
#import "{YourProjectTargetName}-Swift.h"
编辑:
如果您的框架将Defines Module
设置为true
,那么您可以像这样导入它:
@import MyFramework;
要访问 objc 中的 swift 类,该类不是从 NSObject 继承的,您需要:
@objc 公共类 VeediUtils
Swift 类或协议必须用 @objc 属性标记才能在 Objective-C 中访问和使用。 这个属性告诉编译器这段 Swift 代码可以从 Objective-C 访问。 如果您的 Swift 类是 Objective-C 类的后代,编译器会自动为您添加 @objc 属性。
您必须将@objc
添加到VeediUtils
类的声明中,或者使其继承自NSObject
。 否则,Objective-C 将看不到它。
在您的情况下, RecognizedClass
被识别,因为它是UIViewController
的子类,它是NSObject
的子类。
在 Objective-C 中使用 Swift 类
如果您要在 App Target 中导入代码(在一个项目中混合 Objective-C 和 Swift),您应该使用下一行导入#import "<#YourProjectName#>-Swift.h"
将 Swift 代码暴露给 Objective-C代码[在一个项目中混合使用 Swift 和 Objective-C 代码]
在这篇文章中,我将描述如何将 Swift 框架导入到 Objective-C 代码中
Xcode 版本 10.2.1
公开 Swift API。 在 Objective-C 中使用 Swift 的函数[关于]
将模块导入 Objective-C 客户端代码[module_name]
@import module_name;
在Objective-C中使用Swift类
如果要在App Target中导入代码(在一个项目中混合Objective-C和Swift),您应该使用下一个导入行#import "<#YourProjectName#>-Swift.h"
将Swift代码暴露给Objective-C代码[在项目中混合使用Swift和Objective-C代码]
在这篇文章中,我将描述如何将Swift框架导入Objective-C代码
Xcode版本10.2.1
创建框架项目或创建框架目标
File -> New -> Project... -> Cocoa Touch Framework
//or
Project editor -> Add a Target -> Cocoa Touch Framework
将生成两个文件:
Info.plist
- Build Settings -> Info.plist File
<product_name>.h
- Build Phases -> Headers
。 它是伞头文件[关于] 添加文件.swift
Select `.swift` file -> Select File Inspectors Tab -> Target Membership -> Select the target
//or
Project editor -> select a target -> Build Phases -> Compile Sources -> add files
暴露Swift API。 使用Objective-C中的Swift函数[关于]
构建库 - ⌘命令 + B或Product -> Build
注意:确保为与客户端代码相同的流程体系结构构建框架。
查找生成的输出[构建位置]
Products group -> <product_name>.framework -> Show in Finder
该框架包括
Info.plist
Modules
文件夹:
module.modulemap
[关于] [自定义modulemap]此文件是自动生成的,因为Build Settings -> Defines Module -> YES
<product_name>.swiftmodule
文件夹
.swiftdoc
- docs .swiftmodule
- 公共接口/定义 Headers
文件夹:
Headers
部分的文件。 有公共接口/定义 <product_name>-Swift.h
- Xcode生成的头文件[关于] Drag and drop
二进制文件Drag and drop
到Xcode项目中[关于]
Project editor -> select a target -> General -> Embedded Binaries -> path to `<product_name>.framework` file
我会自动将框架添加到:
Project editor -> select a target -> General -> Linked Frameworks and Libraries
Project editor -> select a target -> Build Phases -> Embed Frameworks
Project editor -> select a target -> Build Phases -> Link Binary With Libraries
添加Framework Search paths
[找不到模块] [递归路径]
Project editor -> select a target -> Build Settings -> Search Paths -> Framework Search paths -> add path to the parent of `<product_name>.framework` file
将模块导入Objective-C客户端代码[module_name]
@import module_name;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.