Swift 框架中的快速扩展
我正在学习Swift的扩展,遇到了一个有点奇怪的问题 当我在字符串上编写扩展并将其编译到框架中时,我能够将框架导入到另一个项目中并使用字符串扩展而不会出现任何问题。但是,当我在NSDate上编写扩展并尝试在其他项目中使用它时,编译器会报告“NSDate没有名为 确切地说,我创建了一个非常简单的swift文件,包括以下代码行——Swift 框架中的快速扩展,swift,Swift,我正在学习Swift的扩展,遇到了一个有点奇怪的问题 当我在字符串上编写扩展并将其编译到框架中时,我能够将框架导入到另一个项目中并使用字符串扩展而不会出现任何问题。但是,当我在NSDate上编写扩展并尝试在其他项目中使用它时,编译器会报告“NSDate没有名为 确切地说,我创建了一个非常简单的swift文件,包括以下代码行—— import Foundation extension NSDate { func blah() -> Int { return 0
import Foundation
extension NSDate {
func blah() -> Int {
return 0
}
}
然后我创建了一个目标(Cocoa框架),并将该文件添加到编译列表中。该框架已成功编译
然后,我创建了一个命令行工具并导入了这个项目,同时针对框架进行了链接。当我在NSDate上调用函数blah()时,编译器抱怨道
我正在使用Xcode beta 3。(如中所述)
1.创建Objective-C命令行工具并更改搜索路径
不快。您可以为放入命令行工具中的代码创建Swift框架,但该工具本身不能编译任何Swift代码。这样做会混淆链接器,使其看到Swift库的重复声明(一个在附带的.dylib中,另一个嵌入在命令行工具中)
- 运行路径搜索路径:
$(继承)@executable\u path/。/Frameworks@executable\u path/$(产品名称)。bundle/Contents/Frameworks
发布:$(继承)@executable\u path/。/Frameworks
2.创建捆绑包并更改生成设置
将其命名为与命令行工具相同的名称,但后缀为Bundle
(例如CommandLineToolProductNameBundle)。还要确保它与命令行工具位于同一项目中
- 目标名称:命令行工具产品名称+
Bundle
- 产品名称:与命令行工具产品名称相同
- 嵌入内容包含Swift代码:
YES
- 目标依赖项:您的命令行工具
- 创建一个新的
阶段,将复制文件
设置为目标
,并将命令行工具添加到要复制的文件列表中可执行文件
- 创建一个新的
阶段,将复制文件
设置为目标
,并将嵌入的框架添加到要复制的文件列表中框架
Run
配置
您还可以选择隐藏命令行工具的方案,因为它无法独立运行
- 可执行文件:您的命令行工具
- 调试可执行文件:
YES