【问题标题】:How to import own classes from your own project into a Playground如何将自己项目中的类导入 Playground
【发布时间】:2014-07-25 13:32:37
【问题描述】:

假设这样的设置:

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

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

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

【问题讨论】:

标签: ios swift swift-playground


【解决方案1】:

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

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

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

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

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

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

  6. 您必须在 Playground 中为框架添加一个导入语句。

一旦满足所有这些条件,导入你的框架就可以在操场上工作了。

在 Xcode 7 中,我们引入了另一种机制,您可以使用它来导入自己的类作为源代码,而不是导入框架;您可以在http://help.apple.com/xcode/mac/8.0/#/devfa5bea3af

阅读有关此“辅助资源”支持的信息

【讨论】:

  • “游乐场支持导入框架。” XCode 6 beta 5 Change-log
  • 复杂。苹果应该让它变得更容易。
  • 那么,不可能从应用目标导入类吧?
  • 这在 Xcode 6.1 中似乎不起作用。我遵循了 Ballard 的上述要求,这些要求与 here as a tutorial 相呼应,并且在 Playground 中的 import 语句引发了错误。
  • 请注意:您必须构建 Simulator 二进制文件。构建 Device 二进制文件无效。 (Xcode 版本 6.3.2 (6D2105))
【解决方案2】:

我实际上通过这样做来引用当前项目中的其他 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 中所指示的那样。

【讨论】:

  • 请注意,这将导致同一个文件出现在两个地方并且可以编辑。如果您将style='setup' 添加到&lt;code&gt; 标签,它将显示为折叠/可展开的块,这可能更理想,因为它在一定程度上隐藏了额外的文件。
【解决方案3】:

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

import ModuleName

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

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

重要

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

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

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

【讨论】:

  • 命名技巧是我的问题。非常感谢!
  • 提示:无需将符号声明为public。只需将您的导入标记为@testable import ModuleName
【解决方案4】:

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

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

例如:

【讨论】:

  • 这对我有用。对于其他菜鸟,请记住还要确保将要在操场上使用的东西声明为 publicdeveloper.apple.com/library/ios/documentation/Swift/Conceptual/… - 我还没有找到一个 Swift 资源来弥合学习 Swift(简单)和在 XCode 中实际组织一个 Swift 项目(到目前为止非常不直观)之间的差距。
【解决方案5】:

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

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

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

Xcode 8.2、Swift 3.0.1、macOS Sierra

【讨论】:

  • 返回“没有这样的目录文件”。你能帮忙吗
  • @ZaEeMZaFaR 只是 mkdir .playground 中的那些目录
【解决方案6】:

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

import ModuleName

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

如果它不起作用:

  1. 重建你的项目

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

它解决了很多奇怪的初始化失败和导入错误

【讨论】:

    猜你喜欢
    • 2014-11-29
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 2018-12-23
    • 1970-01-01
    相关资源
    最近更新 更多