如何将自己的类从您自己的项目导入Playground

时间:2014-06-04 18:46:57

标签: ios swift swift-playground

假设这样的设置:

  • 您有一个Xcode 6项目,您已经使用Objective-C和Swift实现了自己的类(比如MyView和MyViewController)
  • 您已将Playground添加到项目中

在Playground中,可以使用UIKit关键字导入import之类的模块(框架)。如何从Playground中启用对项目的其他类的访问?

只是尝试直接访问项目类会产生错误消息: 使用未解析的标识符' MyView'

6 个答案:

答案 0 :(得分:55)

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

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

  2. 您必须已经构建了框架。如果它是iOS框架,则必须为64位运行目标(例如iPhone 5s)构建,并且必须为模拟器构建。

  3. 您必须拥有一个活动方案,该方案至少构建一个目标(该目标的构建位置将用于操场的框架搜索路径)。

  4. 您的"建立位置"首选项(在高级"位置" Xcode的设置)不应设置为" Legacy"。

  5. 如果您的框架不是Swift框架,那么"定义模块"构建设置必须设置为"是"。

  6. 您必须在操场上为框架添加import语句。

  7. 一旦满足所有这些条件,导入框架将在游乐场中运行。

    在Xcode 7中,我们引入了另一种机制,您可以使用它将自己的类作为源导入,而不是导入框架;你可以阅读这个"辅助来源"支持http://help.apple.com/xcode/mac/8.0/#/devfa5bea3af

答案 1 :(得分:17)

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

  • 创建一个空的Playground,并且位置在您的项目下。
  • 在终端中打开YourPlayground.playground捆绑包(是的,它是捆绑=目录)。
  • 使用contents.xcplayground修改vi,然后添加如下所示的其他部分:
<?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.swift重命名为section-2.swift(如果您从头开始创建了Playground,那么您的捆绑包中应该有一个示例section-1.swift
  • 添加名为section-1.swift硬链接(符号链接似乎不起作用),它将指向包外的Swift类文件,如:
ln ../../Classes/MyView.swift section-1.swift
  • 关闭Xcode并再次打开Playground。
  • 现在应该有两个部分,一个是Swift类文件的内容,另一个是从头开始创建Playground的示例内容。

这样我实际上可以在Playground外部运行代码,但是Xcode似乎在这样做时会更频繁地崩溃。

修改

从Xcode 6 beta 5开始,你现在能够引用项目文件,正如Rick Ballard在answer中指示的那样。

答案 2 :(得分:12)

从Xcode 6的Beta 5开始,如果代码在框架中,则可以导入代码。你需要做的是创建一个框架目标,在那里添加Swift文件并在你的游乐场做

import ModuleName

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

请记住制作您想要查看的代码public。您需要在操场上进行更改之前构建项目。 (您还需要编辑操场以触发重新执行。)

重要

不要给操场文件指定与目标相同的名称!如果你这样做,导入似乎工作,但当操场尝试执行时,你会收到以下错误:

  

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

我浪费了一个小时才搞清楚。 :)

答案 3 :(得分:9)

我无法使用这里的任何答案让它工作,所以我开始玩,找到了一种简单的方法,可以让我将一个快速的课程导入游乐场。

只需在项目中创建一个游乐场,其中的一个名为“sources”的目录,只需将swift类的副本拖到该文件夹​​中,然后游乐场就可以访问它。

例如:

enter image description here

答案 4 :(得分:3)

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

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

这样,您的源文件中的更改将立即在您的游乐场生效。 工作得非常好

Xcode 8.2,Swift 3.0.1,macOS Sierra

答案 5 :(得分:-1)

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

import ModuleName

(假设您的游乐场与框架/项目位于同一工作区)

如果它不起作用:

  1. 重建您的项目

  2. 重建游乐场并从那里的旧游乐场复制

  3. 它解决了许多奇怪的错误,无论是初始化失败还是导入都是错误的!