Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在全球范围内导入Swift框架?_Ios_Swift - Fatal编程技术网

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

Ios 如何在全球范围内导入Swift框架?,ios,swift,Ios,Swift,我想找到一种方法,在每一个班级中,在全球范围内导入我的Swift Cocoapod,我如何才能做到这一点 我试了很多东西,但都不管用。以下是一些我还没有尝试过的方法,我认为如果找到一种方法来解决这些问题,可能是可行的: 有一个像UIKit这样的通用导入语句,并将所有内容都放在其中。(编辑:此操作失败) 不知何故,将Swift框架放在Obj-C briding标头中,并将内容导入其中 没有办法做到这一点。这不是一个bug,这是一个语言特性(到目前为止,说到Swift 2.2) Swift使用模块(

我想找到一种方法,在每一个班级中,在全球范围内导入我的Swift Cocoapod,我如何才能做到这一点

我试了很多东西,但都不管用。以下是一些我还没有尝试过的方法,我认为如果找到一种方法来解决这些问题,可能是可行的:

有一个像UIKit这样的通用导入语句,并将所有内容都放在其中。(编辑:此操作失败)


不知何故,将Swift框架放在Obj-C briding标头中,并将内容导入其中

没有办法做到这一点。这不是一个bug,这是一个语言特性(到目前为止,说到Swift 2.2)

Swift使用模块(苹果在Xcode 5中为Objective-C引入了这些模块),并且每个文件都是一个语义单元,因此您需要明确告知Xcode哪些模块暴露于定义的文件中


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

您不想这样做的原因:

想象一下,如果您的两个框架使用相同的方法名,编译器将无法确定应该运行哪个方法


要了解更多信息,请参见问题

,Swift中强烈建议不要这样做,因为这样会在模块之间引入隐式耦合

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

import ModuleName
public typealias ClassName = ModuleName.ClassName
自Swift4起:

  • 在Swift项目中
  • 想在全球范围内有另一个Swift项目吗 进口(并使用椰子荚)
我只是通过在桥接标题中添加以下行来做到这一点:

#import <PodName/PodName-Swift.h>
#导入

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

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

@\u导出导入Podname


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

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

  • 创造新的环境
  • #import
    添加到Objective-C桥接头文件中(这样就不需要对每个.swift文件重复此操作)

对于POD,您必须执行类似于导入的操作,可以使用桥接头。这个问题可能是这个问题的重复:事实上,很明显,这个答案从未被接受过,所以这可能不起作用。。。我认为答案可能是,你不能在swift中这样做。您需要导入到使用框架的每个文件中,对不起。OP,是什么阻止您接受答案@prolfe不幸的是,没有办法解决这个问题,这是一个好方法-代码只在需要的地方可用,因此它可以编译/运行Quicker用户感兴趣的所有内容,我仍然认为/希望有某种黑客可以获得这种行为。此外(或“随机”),Xcode可能会神奇地了解Swift文件的一个框架,但AppCode会完全混乱。您需要对框架客户端中的每个Swift文件执行
import
。@Krodak您是否碰巧有一个苹果链接提到了这一点?我非常同意你的观点,但我真的希望苹果能给我一些指示。谢谢。100%松耦合组件仅在理论上存在。在整个项目中始终存在一些全局库依赖项。例如,具有日志级别的自定义记录器就是一个很好的例子。因此typealias非常适合这种情况。有趣的“黑客”在桥接头中导入自动生成的.h。但是有一个限制,因为.h在Swift模块中只包括
@objc
NSObject
子类;它不包括纯Swift的东西。但是我如何在项目中编写…比如appdelegate或anyviewcontroller@christoffer为什么不建议这样做?请解释引用之前的海报“在Swift中强烈建议不要这样做,因为这样会在模块之间引入隐式耦合。”-谢谢大家,这个sintax也可以与SPM一起使用。好男人:D