在另一个 Swift 项目中使用自定义 Swift 框架

Posted

技术标签:

【中文标题】在另一个 Swift 项目中使用自定义 Swift 框架【英文标题】:using custom Swift framework in another Swift project 【发布时间】:2015-07-07 10:22:27 【问题描述】:

我在另一个项目中使用自定义纯 Swift 框架时遇到问题。

一些笔记(我相信我已经彻底搜索了所有可能的答案):

    我在框架中将我的类声明为公共类。 我已成功构建并使用 Swift 目标应用程序运行了框架,但只能在框架项目中运行。 我已将我的框架包含在链接框架、库和嵌入式二进制文件中。

我要做的是通过仅导入产品框架来构建一个纯 Swift 单视图应用程序项目。我得到的错误是“MyClass 不可用:找不到此类的 Swift 声明”(如上所述是公共的)。我也有一个类似错误的公开枚举:“使用未声明的类型'MY_ENUM'” 示例代码如下:

import Foundation
import UIKit
import MyFramework /// don't know if this is needed.

public class ViewController: UIViewController
    var myclass:MyClass? ///here is the above error ,it's initialized in the viewDidLoad() function
    var myEnum:MY_ENUM = MY_ENUM.MY_ENUM_VALUE /// 2nd enumeration error.
    override public func viewDidLoad()
        super.viewDidLoad()

     self.myClass = MyClass(arguments) ///same error as above
     self.myClass?.myFunction  /// ViewController does not have a member 'MyClass' error
     /// more code here with errors regarding the class and enum.

我也尝试过使用 Objective-C 桥接头(尽管我认为这是错误的)并导入我的框架头。

#import <MyFramework/MyFramework.h>

是否有可能解决上述问题,或者是 Swift 的限制,我正在徒劳地尝试?

最后一点:我在我的框架中包含了来自另一个 Objective-C 框架的一些其他头文件,因为这是将其构建为自定义 Swift 框架的唯一方法。那里的类​​对 Swift 应用程序是可见的。

P.S.如果需要更多代码,我很乐意提供。

【问题讨论】:

【参考方案1】:

解决了这个问题。

不得不将 .swift 文件和 .h 文件作为公共头文件放在我的自定义框架中(虽然不明白为什么)并重新构建。

【讨论】:

您的意思是在构建阶段?您是否在框架头文件中添加了一些内容?似乎对我不起作用。 自从我上次这样做以来已经很久了,但如果我没记错的话,只需将 .swift 文件拖放到 Xcode 资源管理器的 .framework 文件夹中,然后在构建阶段添加它们只是为了确定。【参考方案2】:

可能你的框架路径不对?

【讨论】:

我通过拖放导入框架。它在项目导航器中不是红色的,所以我认为这不是问题。 @2mytrompess Emm...你检查过你的 Build Sitting 吗?框架搜索路径? 如果您指的是构建设置中的框架搜索路径,是的,它是正确的。虽然现在有多个路径,因为我一直在尝试导入和删除几次。同样正如我在帖子中所说,目标 App 可以看到在我的框架标题中声明的其他类。这些类虽然是 Objective-C 代码,但我没有创建它们。我必须将这些标头放入我的 Swift 框架项目中,并且不仅包括我使用过的第 3 方框架,如果我希望我的框架能够无错误地构建。问题在于我的 Swift 课程。

以上是关于在另一个 Swift 项目中使用自定义 Swift 框架的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 项目中使用 Objective C 类中的 Swift 类

在 Swift 项目中使用 Objective C 类中的 Swift 类

将纯 Swift 自定义框架导入其他 Swift 项目

如何为自定义 UIControl 添加触摸事件并在 swift 5 中确定触摸的项目

在 Swift 中使用自定义对象填充数组

为啥应用存档在 iOS、swift、xcode 9.2 中使用自定义框架失败