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

Esq*_*uth 36 ios swift

我希望有一种方法可以在每个类中全局导入我的Swift Cocoapods,我怎样才能实现这一目标?

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

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

不知怎的把Swift框架放在Obj-C briding header中并导入那里的东西.

Chr*_*ist 31

您应该能够通过在导入之前添加@_exported来全局导入它.

@_exported import Podname

但是,与之前提到的海报一样,不建议这样做.


小智 29

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

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

import ModuleName
public typealias ClassName = ModuleName.ClassName
Run Code Online (Sandbox Code Playgroud)

  • 仅理论上存在100%松耦合的组件。整个项目中始终存在一些全局库依赖项。例如,具有日志级别的自定义记录器将是一个很好的示例。因此,typealias非常适合此类情况。 (4认同)

ace*_*lia 16

从Swift4开始:

  • 参与Swift项目
  • 想要全局导入另一个Swift项目(并使用cocoapods)

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

#import <PodName/PodName-Swift.h>
Run Code Online (Sandbox Code Playgroud)

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

  • 有趣的“ hack”在桥接头中导入自动生成的.h。但是有一个限制,因为.h在Swift模块中仅包含`@ objc`和`NSObject`子类。它不包括纯Swift的东西。 (2认同)

Kro*_*dak 9

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

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

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