加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

框架中的Swift扩展

发布时间:2020-12-14 04:57:22 所属栏目:百科 来源:网络整理
导读:我正在学习 Swift的扩展并遇到一个有点奇怪的问题. 当我在String上编写扩展并将其编译到框架中时,我能够将框架导入到不同的项目中并使用字符串扩展而没有任何问题.但是,当我在NSDate上编写扩展并尝试在不同的项目中使用它时,编译器报告“NSDate没有名为…的
我正在学习 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读