如何在全球范围内导入Swift框架?

时间:2015-11-01 08:08:36

标签: ios swift

我希望有一种方法可以在每个班级全局导入我的Swift Cocoapods,我该如何实现?

我尝试了很多东西而且没有用。以下是一些我没有尝试过的方法,如果找到了解决方法,可能会想到这些方法:

拥有像UIKit这样的一般导入语句,并将所有内容放在那里。 (编辑:失败)

以某种方式将Swift框架放在Obj-C briding header中并导入那里的东西。

6 个答案:

答案 0 :(得分:28)

在Swift中强烈反对,因为这会在模块之间引入隐式耦合。

但是,您可以通过在导入其他模块的模块中声明typealias来全局使用某个符号:

import ModuleName
public typealias ClassName = ModuleName.ClassName

答案 1 :(得分:24)

您应该可以通过在导入之前添加@_exported来全局导入它。

@_exported import Podname

然而,就像之前提到的海报一样,不推荐这样做。

答案 2 :(得分:13)

从Swift4开始:

  • 参与Swift项目
  • 希望在全球范围内拥有另一个Swift项目 导入(和使用cocoapods)

我只是通过在我的桥接标题中添加以下行来设法做到这一点:

#import <PodName/PodName-Swift.h>

这种做法有多好/坏?不确定,但我只想在我的项目中全局提供一些扩展。这就行了。

答案 3 :(得分:9)

没有方法可以做到这一点。这不是一个错误,这是一个语言功能(到目前为止,谈到Swift 2.2)。

Swift使用模块(Apple在Xcode 5中为Objective-C引入了它们),每个文件都是语义单元,因此您需要明确告知Xcode哪些模块暴露给定义的文件。

不仅不支持您描述的行为,而且您也不应该试图绕过它。使用不必要的(未使用的)模块理论上可以产生较慢的代码(考虑到编译器将此信息用于其优化过程)。

答案 4 :(得分:3)

您可以通过以下方式手动实现相同的功能:

  • 创建Objective-C Bridging Header file;
  • #import <UIKit/UIKit.h>添加到Objective-C桥接标头文件中(这样就不必为每个.swift文件重复此操作)。

对于吊舱,您必须喜欢#import <SwiftyJSON/SwiftyJSON-umbrella.h>

答案 5 :(得分:0)

您不希望这样做的原因:

想象一下,如果你的框架都使用相同的方法名称,它会使编译器的内容变得模糊。编译器不会知道应该运行哪种方法。

要了解详情,请参阅this问题