如何从自己的项目导入自己的类到游乐场

假设这样的设置:

  • 你有一个Xcode 6项目,你已经实现了你自己的类(比如说MyView和MyViewController),Objective-C和Swift
  • 你已经在你的项目中添加了一个游乐场

在Playground中,可以使用import关键字importUIKit这样的模块(框架)。 你如何从游乐场启用项目的其他课程?

只是试图直接访问项目类的结果与一个错误消息: 使用未parsing的标识符'MyView'

从Xcode 6.0 Beta 5开始,现在可以将自己的框架导入游乐场。 这提供了一种在应用程序和游乐场之间共享代码的方法,它们都可以导入您的框架。 去做这个:

  1. 您的游乐场必须与生成框架的项目位于同一个工作区中。 您的工作空间必须包含生成框架的目标,而不是使用预先构build的框架。

  2. 你必须已经build立你的框架。 如果它是iOS框架,则必须为64位运行目标(例如iPhone 5s)构build,并且必须为Simulator构build。

  3. 你必须有一个至less构build一个目标的活动scheme(目标的构build位置将被用于游乐场的框架searchpath)。

  4. 您的“生成位置”首选项(在Xcode的高级“位置”设置中)不应设置为“传统”。

  5. 如果你的框架不是Swift框架,那么“Defines Module”构build设置必须设置为“Yes”。

  6. 您必须为该框架添加一条导入语句到您的操场。

一旦所有这些条件得到满足,导入你的框架将在一个操场上工作。

在Xcode 7中,我们引入了另一种机制,可以用来导入自己的类作为源代码,而不是导入框架。 您可以在http://help.apple.com/xcode/mac/8.0/#/devfa5bea3af上阅读有关“辅助资源”的支持

我实际上设法通过这样做来引用当前项目中的其他Swift文件:

  • 创build一个空的游乐场,并放置在您的项目下的某个地方。
  • YourPlayground.playground打开YourPlayground.playground包(是的,它是一个bundle =目录)。
  • 例如用vi编辑contents.xcplayground ,并添加另一个部分,如下所示:
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <playground version='3.0' sdk='iphonesimulator'> <sections> <code source-file-name='section-1.swift'/> <code source-file-name='section-2.swift'/> </sections> <timeline fileName='timeline.xctimeline'/> </playground> 
  • 重命名section-1.swiftsection-2.swift (如果你从零开始创build了Playground,则应该有一个示例section-1.swift在你的包中)
  • 添加一个名为section-1.swift硬链接 (符号链接似乎不起作用),它将指向包之外的Swift类文件,如:
 ln ../../Classes/MyView.swift section-1.swift 
  • closuresXcode并再次打开Playground。
  • 现在应该有两个部分,一个是Swift类文件的内容,另一个是从头创buildPlayground的示例内容。

通过这种方式,我实际上可以运行在Playground之外的代码,但是当像这样做时,Xcode似乎更频繁地崩溃。

编辑:

从Xcode 6 beta 5开始,您现在可以参考项目文件,正如Rick Ballard在他的回答中所指示的那样。

由于Xcode 6的Beta 5,如果它在一个框架中,可以导入你的代码。 你需要做的是创build一个框架目标,在你的游乐场里添加Swift文件

 import ModuleName 

您可以在构build设置中查找模块名称。 通常与目标名称相同。

记得把你想要看的public的代码。 您需要在操场上有更改之前构build项目。 (您还需要编辑操场以触发重新执行。)

重要

不要给操场文件命名为目标! 如果你这样做,导入似乎工作,但当操场试图执行时,你会得到以下错误:

游乐场执行失败:错误:无法查找符号:

我花了一个小时就搞清楚了。 🙂

我无法使用任何答案在这里工作,所以我开始玩耍,find了一个简单的方法,为我导入一个快捷类到游乐场。

只要在你的项目中创build一个游乐场,在里面有一个名为“sources”的目录,只需将一个swift类的副本拖到该文件夹​​中,游乐场就可以访问它。

例如:

在这里输入图像说明

我只是把所有我的swift文件链接到Sources文件夹中:

 cd /path/to/project/MyPlayground.playground/Sources ln -s ../../*.swift . 

这样,你的源文件的改变将立即在你的游乐场生效。 工作很好

Xcode 8.2,Swift 3.0.1,macOS Sierra

所有你需要做的 – 写在开头:

 import ModuleName 

(假设你的操场和框架/项目放在同一个工作区)

如果这不起作用:

  1. 重build你的项目

  2. 重新创build游乐场,并从那里的旧操场复制

它解决了很多奇怪的错误 ,无论初始化和导入任何!