Swift Playgrounds 可以查看同一个项目中的其他源文件吗?

Posted

技术标签:

【中文标题】Swift Playgrounds 可以查看同一个项目中的其他源文件吗?【英文标题】:Can Swift playgrounds see other source files in the same project? 【发布时间】:2014-06-04 04:36:05 【问题描述】:

我在项目的单独 Swift 文件中创建了最简单的自定义类:

class Foo

    init()
    
        println("I made a foo.")
    

然后,在同一个项目的操场上,我尝试了

var x = Foo()

Xcode 似乎不喜欢这样,并告诉我 'Foo' 是一个未解析的标识符。我对 Playground 如何融入项目结构的其余部分感到有些困惑,因为我项目中的任何其他 Swift 文件都可以毫无问题地解析“Foo”。

如何让我的 Playground 能够使用我在项目的其他 Swift 文件中定义的自定义类?我尝试为构建目标命名产品模块并将其导入到 Playground 中,但没有成功:Playground 无法识别产品模块的名称。

提前感谢您的帮助。我知道这很简单。

【问题讨论】:

我在这里问了同样的问题:***.com/questions/24016561/… bauerMusic:你的问题不同,这是关于让游乐场在游乐场外的某个地方访问 Swift 文件(类)。 很好的问题。可惜答案不是我想听到的,但事实就是事实。 How to import own classes from your own project into a Playground的可能重复 【参考方案1】:

有两种方法可以在 Playground 中使用您的项目代码

Playground 的源文件夹

是的,在 Xcode 6.3 Beta 3 中(希望在未来):

Playgrounds 现在在 Xcode 中表示为一个带有显示三角形的捆绑包,单击该三角形会显示资源和源文件夹。这些文件夹包含可从 Playground 的主要 Swift 代码轻松访问的其他内容。要查看这些文件夹,请选择“视图”>“导航器”>“显示项目导航器”(或直接按 Command-1)。

打开一个新的 Playground 并按 cmd + 1 以查看左侧窗格,然后将文件拖到 source 文件夹中以在 Playground 中使用。

注意:

源文件夹中的文件被编译成一个框架,这意味着如果您希望在 Playground 中可以访问类、函数等,它们必须明确标记为 public

public class VisibleClass 


class InvisibleClass 

来源:release blog

将项目编译到框架中

    如果尚未将项目移至工作区。 (文件 -> 另存为工作区)就可以了 将框架目标添加到您的项目中 构建框架 确保将您要访问的文件添加到您的框架目标中 将 Playground 添​​加到工作区(不是项目) 使用@testable import YourFrameworkName 游乐场的访问代码

如果你想check it out,我在这里写了一篇更详细的文章。

【讨论】:

不幸的是,它对我不起作用。我仍然收到“没有这样的模块'MyClass'”错误。该类是专门公开的,并复制到 Sources 目录。 @JonM - 您的项目中一定有其他事情发生,我无法从您当前的描述中真正调试。这也是一个相当新的功能,所以它一定会打嗝。继续努力:) 不是问题@Logan - 感谢您的回复。我已经设法通过不依赖纯操场进行测试来解决它:)【参考方案2】:

他们不能。游乐场是独立的。这有望在未来有所改变。

编辑:从 Xcode 6.3 开始,Playgrounds 现在可以包含支持代码。他们仍然看不到同一项目中的其他代码,但可以将代码添加到 Playground 的支持文件夹中,以便在 Playground 中使用。请参阅the Swift blog 了解更多信息。

【讨论】:

我设法为此创建了一个解决方法 (***.com/questions/24045245/…),但在使用这样的 Swift 文件时 Xcode 似乎更频繁地崩溃。 随着 Xcode 6.3 的发布正式改变(见下文:***.com/a/29220769/2611971) @Logan:虽然 Xcode 6.3 现在确实允许在 Playground 中支持 swift 文件,但确实将 Playground 添​​加到项目中不允许 Playground 看到项目中的其他代码。 啊,我明白了。感谢您为我澄清。 什么?那么我们应该如何单独测试应用程序文件呢?你是说我们甚至无法控制测试的链接,并且必须运行整个应用程序来测试一个简单的模型结构?请看:***.com/questions/28128169/…【参考方案3】:

是的。 我首先在 Sources 目录中添加了一个类文件。 我公开了所有内容:

类 初始化 成员

经过多次尝试,没有任何效果。 XCode 崩溃了,重新打开后它的运行就像一个魅力。

【讨论】:

【参考方案4】:

在 Xcode 10 的项目导航器中:

    将源代码文件添加到 Playground 的 Sources 文件夹中。 将文件从 Playground 的 Sources 文件夹拖到项目中的所需位置(您应该会看到“圆圈中的加号”小图标出现。 结束拖动,然后在“添加文件”对话框中取消选中“如果需要则复制”

源文件现在“存在”在 Playground 包中;项目引用它(您可以使用文件检查器进行验证)。

我尝试了另一种方法:文件位于项目文件夹中,并在 Playground 的 Sources 文件夹中引用,但它不起作用;我最终得到了源代码文件的两份副本。

【讨论】:

以上是关于Swift Playgrounds 可以查看同一个项目中的其他源文件吗?的主要内容,如果未能解决你的问题,请参考以下文章

Swift 中 Playgrounds 的用途是啥?

如何在 Swift Playgrounds 中睡觉并获取最新的异步值?

Swift Playgrounds - 使用未解析的标识符“self”

将 JSON 文件添加到 Swift Playgrounds

将图像插入 iPad 版 Swift Playgrounds

swift Swift Playgrounds模拟时钟示例。