微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

框架中的Swift扩展

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

当我在String上编写扩展并将其编译到框架中时,我能够将框架导入到不同的项目中并使用字符串扩展而没有任何问题.但是,当我在NSDate上编写扩展并尝试在不同的项目中使用它时,编译器报告“NSDate没有名为…的成员”

确切地说,我创建了一个非常简单的快速文件,包括这些代码行 –

import Foundation
extension NSDate {
    func blah() -> Int {
        return 0
    }
}

然后我创建了一个目标(Cocoa Framework)并将此文件添加到编译列表中.该框架已成功编译.

然后我创建了一个命令行工具并导入了这个项目,同时链接到框架.当我在NSDate上调用函数blah()时,编译器抱怨.

我正在使用Xcode beta 3.

解决方法

(如 http://colemancda.github.io/programming/2015/02/12/embedded-swift-frameworks-osx-command-line-tools/所述)

1.创建Objective-C命令行工具并更改搜索路径

不是斯威夫特.您可以为您在命令行工具中放置的代码创建一个Swift框架,但该工具本身不能编译任何Swift代码.这样做会使链接器混乱,并使其看到Swift库的重复声明(一个在装运的.dylib中,另一个嵌入在命令行工具中).

> Runpath搜索路径:

调试:$(继承)@executable_path /../ Frameworks @executable_path / $(PRODUCT_NAME).bundle / Contents / Frameworks

发布:$(继承)@executable_path /../框架

2.创建一个包并更改构建设置

赋予它与命令行工具相同的名称,但后缀为Bundle(例如CommandLinetoolProductNameBundle).还要确保它与命令行工具在同一项目中的目标.

>目标名称:命令行工具产品名称
>产品名称:与命令行工具产品名称相同

>嵌入式内容包含Swift代码:是

3.在Build Phases中添加依赖项

>目标依赖项:您的命令行工具
>创建一个新的复制文件阶段,将目标设置为可执行文件,并将命令行工具添加到要复制的文件列表中.
>创建一个新的复制文件阶段,将目标设置为框架,并将嵌入式框架添加到要复制的文件列表中.

4.更改捆绑包方案中的“运行”配置

您也可以选择隐藏命令行工具的方案,因为它不能独立运行.

>可执行文件:您的命令行工具> Debug Executable:YES

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐