77

假设这样的设置:

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

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

只是尝试直接访问项目类会导致错误消息: 使用未解析的标识符“MyView”

4

6 回答 6

57

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

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

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

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

  4. 您的“构建位置”首选项(在 Xcode 的高级“位置”设置中)不应设置为“旧版”。

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

  6. 您必须为框架添加一个导入语句到您的游乐场。

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

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

于 2014-06-04T23:02:20.113 回答
18

通过这样做,我实际上设法引用了当前项目中的其他 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.swiftsection-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 在他的回答中所指示的那样。

于 2014-06-06T18:41:58.547 回答
12

从 Xcode 6 的 Beta 5 开始,如果代码位于框架中,则可以导入代码。您需要做的是创建一个框架目标,在其中添加 Swift 文件,然后在您的 Playground 中执行

import ModuleName

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

记得制作你想看的代码public。您需要先构建项目,然后才能在 Playground 中进行更改。(您还需要编辑 Playground 以触发重新执行。)

重要的

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

Playground 执行失败:错误:无法查找符号:

我浪费了一个小时来弄清楚这一点。:)

于 2014-08-06T08:31:44.110 回答
10

我无法使用此处的任何答案使其正常工作,因此我开始尝试并找到了一种简单的方法,可以将 swift 类导入游乐场。

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

例如:

在此处输入图像描述

于 2015-10-14T02:08:52.513 回答
4

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

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

这样,源文件中的更改将立即在您的 Playground 中生效。工作得很好

Xcode 8.2、Swift 3.0.1、macOS Sierra

于 2016-12-15T21:36:10.290 回答
-1

您所要做的就是在开头写下:

import ModuleName

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

如果它不起作用:

  1. 重建你的项目

  2. 重新创建游乐场并从那里的旧游乐场复制所有内容

它解决了许多初始化失败和导入任何东西的奇怪错误!

于 2015-06-05T14:20:38.990 回答