我想有一种方法来导入我的雨燕椰子全局在每一个类,我怎么才能实现这一点?我尝试了很多方法,但都不起作用。下面是一些我还没有尝试过的方法,我认为如果找到一种方法,这些方法可能是可行的:有一个像UIKit这样的通用导入语句,并把所有的东西都放进去。此操作失败)不知何故,把Swift框架放在Obj-C桥接头中,并在那里导入内容。
jobtbby31#
您应该能够通过在导入之前添加@_exported来全局导入它。
@_exported import MyPodModuleName
但是,就像other answer提到的那样,不建议对整个模块进行这种操作,因为这会在模块之间引入隐式耦合。因此,请尝试以下内容:
import Foundation @_exported import class MyModuleName.MyClassName @_exported import class MyModuleName.MyOtherClass
cbeh67ev2#
在Swift中强烈建议不要这样做,因为这会在模块之间引入隐式耦合。但是,您可以通过在导入其他模块的模块中声明typealias来使某个符号全局可用:
typealias
import ModuleName public typealias ClassName = ModuleName.ClassName
rnmwe5a23#
截至Swift 4:
我只是通过在桥接头文件中添加以下行来做到这一点:
#import <PodName/PodName-Swift.h>
这种做法有多好/多坏?不确定,但我只是想在我的项目中全球范围内提供一些扩展。这就成功了。
aoyhnmkz4#
没有办法做到这一点。这不是一个bug,这是一个语言特性(到目前为止,说到Swift 2.2)。Swift使用modules(苹果在Xcode 5 for Objective-C中引入了它们),每个文件都是一个语义单元,因此需要显式地通知Xcode哪些模块暴露给定义的文件。不仅没有对你所描述的行为的支持,而且你也不应该试图绕过它。使用不必要的(未使用的)模块理论上会产生更慢的代码(考虑到编译器使用这些信息来优化过程)。
t2a7ltrp5#
您可以通过以下方式手动实现相同的功能:
#import <UIKit/UIKit.h>
对于pod,您必须执行#import <SwiftyJSON/SwiftyJSON-umbrella.h>之类的操作
#import <SwiftyJSON/SwiftyJSON-umbrella.h>
zaqlnxep6#
您不想这样做的原因:
想象一下,如果你的两个框架都使用 * 相同的方法名 *,这会使编译器产生歧义,编译器不知道应该运行哪个方法。要了解更多信息,请参阅this问题
6条答案
按热度按时间jobtbby31#
您应该能够通过在导入之前添加@_exported来全局导入它。
但是,就像other answer提到的那样,不建议对整个模块进行这种操作,因为这会在模块之间引入隐式耦合。
因此,请尝试以下内容:
cbeh67ev2#
在Swift中强烈建议不要这样做,因为这会在模块之间引入隐式耦合。
但是,您可以通过在导入其他模块的模块中声明
typealias
来使某个符号全局可用:rnmwe5a23#
截至Swift 4:
我只是通过在桥接头文件中添加以下行来做到这一点:
这种做法有多好/多坏?不确定,但我只是想在我的项目中全球范围内提供一些扩展。这就成功了。
aoyhnmkz4#
没有办法做到这一点。这不是一个bug,这是一个语言特性(到目前为止,说到Swift 2.2)。
Swift使用modules(苹果在Xcode 5 for Objective-C中引入了它们),每个文件都是一个语义单元,因此需要显式地通知Xcode哪些模块暴露给定义的文件。
不仅没有对你所描述的行为的支持,而且你也不应该试图绕过它。使用不必要的(未使用的)模块理论上会产生更慢的代码(考虑到编译器使用这些信息来优化过程)。
t2a7ltrp5#
您可以通过以下方式手动实现相同的功能:
#import <UIKit/UIKit.h>
添加到Objective-C桥接头文件中(这样就不需要对每个.swift文件重复此操作)。对于pod,您必须执行
#import <SwiftyJSON/SwiftyJSON-umbrella.h>
之类的操作zaqlnxep6#
您不想这样做的原因:
想象一下,如果你的两个框架都使用 * 相同的方法名 *,这会使编译器产生歧义,编译器不知道应该运行哪个方法。
要了解更多信息,请参阅this问题