Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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
Swift 框架中的快速扩展_Swift - Fatal编程技术网

Swift 框架中的快速扩展

Swift 框架中的快速扩展,swift,Swift,我正在学习Swift的扩展,遇到了一个有点奇怪的问题 当我在字符串上编写扩展并将其编译到框架中时,我能够将框架导入到另一个项目中并使用字符串扩展而不会出现任何问题。但是,当我在NSDate上编写扩展并尝试在其他项目中使用它时,编译器会报告“NSDate没有名为 确切地说,我创建了一个非常简单的swift文件,包括以下代码行—— import Foundation extension NSDate { func blah() -> Int { return 0

我正在学习Swift的扩展,遇到了一个有点奇怪的问题

当我在字符串上编写扩展并将其编译到框架中时,我能够将框架导入到另一个项目中并使用字符串扩展而不会出现任何问题。但是,当我在NSDate上编写扩展并尝试在其他项目中使用它时,编译器会报告“NSDate没有名为

确切地说,我创建了一个非常简单的swift文件,包括以下代码行——

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
3.在构建阶段添加依赖项

  • 目标依赖项:您的命令行工具

  • 创建一个新的
    复制文件
    阶段,将
    目标
    设置为
    可执行文件
    ,并将命令行工具添加到要复制的文件列表中

  • 创建一个新的
    复制文件
    阶段,将
    目标
    设置为
    框架
    ,并将嵌入的框架添加到要复制的文件列表中

4.更改捆绑方案中的
Run
配置 您还可以选择隐藏命令行工具的方案,因为它无法独立运行

  • 可执行文件:您的命令行工具

  • 调试可执行文件:
    YES


请提供更多信息。确切的错误是什么,您是否使用最新的Xcode测试版,当在框架之外时,这是否有效…相关: