在ObjC中使用Swift库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在ObjC中使用Swift库相关的知识,希望对你有一定的参考价值。

有没有一种在ObjC中使用Swift库的简单方法?如果是,我该怎么办?

这里是我想使用的库:https://github.com/matthewpalmer/Regift

顺便说一句,如果你们知道在ios中将视频转换为动画gif的另一种方法。谢谢!

答案

您应该看一下Apple的文档。

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

参考它,

从同一目标将Swift代码导入Objective-C

使用此语法将该目标中的Swift代码导入该目标中的任何Objective-C .m文件并替换相应的名称:OBJECTIVE-C

import "ProductModuleName-Swift.h" The Swift files in your target will be visible in Objective-C .m files containing this import

声明。有关从Objective-C代码使用Swift的信息,请参阅使用Objective-C中的Swift。

另一答案

Objective-C consumer - > Swift静态库

Xcode版本10.2.1

创建一个Swift静态库或Create Swift静态库Target

创建一个库项目

File -> New -> Project... -> Cocoa Touch Static Library -> Enter necessary information and choose Language -> Swift

准备Objective-C库以使用Swift Exposed类应该从NSObject扩展(添加import Foundation),而暴露的方法应该有@objc注释

构建库并查找生成的输出(确保为与客户端代码相同的流程体系结构构建库)。默认情况下,它将位于DerivedData文件夹的子文件夹中。(如果在开发过程中删除DerivedData并重新生成它,则可以更改)

Products group -> lib<module_name>.a -> Show in Finder

该目录包括

  • lib<module_name>.a - 内置静态库
  • 包含include文件夹的module_name文件夹,包含.h文件 - 公共接口/定义和module_name.modulemap文件

使用Swift静态库

Link Binary With Libraries

Project editor -> select a target -> Build Phases -> Link Binary With Libraries -> add -> Add Others... -> point to `lib<module_name>.a` file

添加Library Search paths

Project editor -> select a target -> Build Settings -> Search Paths -> Library Search paths -> add path to the parent of `lib<module_name>.a` file

添加Header Search Paths

Project editor -> select a target -> Build Settings -> Search Paths -> Header Search Paths -> add path to the parent of `.swiftmodule` folder

将空.swift file添加到Objective-C项目中。当Xcode要求按下创建Bridging Header(它将创建module_name-Bridging-Header.h)并在Project editor -> select a target -> Build Settings -> Swift Compiler - General -> Objective-C Bridging Header中设置此文件的路径

  • 当您设置path时,您可以定义父文件夹之一的路径并设置recursive/**将添加到路径的末尾)。例如,您可以使用path参数将Build污染到recursive目录。
  • 如果patch包含空格 - ,你应该使用来逃避它们或用双引号""封闭路径

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

#import "module_name-Swift.h"

Objective-C consumer -> Objective-C static library

Swift consumer -> Swift static library

Swift consumer -> Objective-C static library

以上是关于在ObjC中使用Swift库的主要内容,如果未能解决你的问题,请参考以下文章

用 Swift 中使用的 ObjC 编写的消除歧义覆盖方法

为啥 Swift Int 零在 objc 代码中被读取为零?

如何避免在带有 Swift 4 的 iOS 11 中使用带有刷新控件的 @objc?

Objc 代码找不到 swift 中定义的 Bool 变量

Swift与Objective-C的兼容“黑魔法”:@objc和Dynamic

何时在 Swift 中使用 @objc?