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

rxztt3cl  于 2022-12-26  发布在  Swift
关注(0)|答案(6)|浏览(118)

我想有一种方法来导入我的雨燕椰子全局在每一个类,我怎么才能实现这一点?
我尝试了很多方法,但都不起作用。下面是一些我还没有尝试过的方法,我认为如果找到一种方法,这些方法可能是可行的:
有一个像UIKit这样的通用导入语句,并把所有的东西都放进去。此操作失败)
不知何故,把Swift框架放在Obj-C桥接头中,并在那里导入内容。

jobtbby3

jobtbby31#

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

@_exported import MyPodModuleName

但是,就像other answer提到的那样,不建议对整个模块进行这种操作,因为这会在模块之间引入隐式耦合。
因此,请尝试以下内容:

import Foundation

@_exported import class MyModuleName.MyClassName
@_exported import class MyModuleName.MyOtherClass
cbeh67ev

cbeh67ev2#

在Swift中强烈建议不要这样做,因为这会在模块之间引入隐式耦合。
但是,您可以通过在导入其他模块的模块中声明typealias来使某个符号全局可用:

import ModuleName
public typealias ClassName = ModuleName.ClassName
rnmwe5a2

rnmwe5a23#

截至Swift 4:

  • 参与Swift项目
  • 希望全球导入另一个Swift项目(并使用cocopods)

我只是通过在桥接头文件中添加以下行来做到这一点:

#import <PodName/PodName-Swift.h>

这种做法有多好/多坏?不确定,但我只是想在我的项目中全球范围内提供一些扩展。这就成功了。

aoyhnmkz

aoyhnmkz4#

没有办法做到这一点。这不是一个bug,这是一个语言特性(到目前为止,说到Swift 2.2)。
Swift使用modules(苹果在Xcode 5 for Objective-C中引入了它们),每个文件都是一个语义单元,因此需要显式地通知Xcode哪些模块暴露给定义的文件。
不仅没有对你所描述的行为的支持,而且你也不应该试图绕过它。使用不必要的(未使用的)模块理论上会产生更慢的代码(考虑到编译器使用这些信息来优化过程)。

t2a7ltrp

t2a7ltrp5#

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

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

对于pod,您必须执行#import <SwiftyJSON/SwiftyJSON-umbrella.h>之类的操作

zaqlnxep

zaqlnxep6#

您不想这样做的原因:

想象一下,如果你的两个框架都使用 * 相同的方法名 *,这会使编译器产生歧义,编译器不知道应该运行哪个方法。
要了解更多信息,请参阅this问题

相关问题