假设这样的设置:

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

在操场上,可以导入模块(框架),如 UIKitimport 关键字。如何启用从Playground访问项目的其他类?

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

有帮助吗?

解决方案

改名为6.0beta5,现在可以将自己的框架导入到操场中。这提供了一种在应用程序和playgrounds之间共享代码的方法,它们都可以导入框架。要做到这一点:

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

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

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

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

  5. 如果您的框架不是Swift框架,则"Defines Module"构建设置必须设置为"Yes"。

  6. 您必须为框架添加一个import语句到您的playground。

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

在Xcode7中,我们引入了另一种机制,您可以使用它来导入自己的类作为源,而不是导入框架;您可以在以下网址阅读有关此"辅助源"支持的信息 http://help.apple.com/xcode/mac/8.0/#/devfa5bea3af

其他提示

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

  • 创建一个空的操场和地方是在你的项目的某个地方.
  • 打开 YourPlayground.playground 终端中的bundle(是的,它是一个bundle=directory)。
  • 编辑 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 (如果您从头开始创建游乐场,应该有一个例子 section-1.swift 在你的捆绑中)
  • 添加一个 硬链接 (符号链接似乎不起作用)命名 section-1.swift 它将指向捆绑包之外的Swift类文件,如下所示:
ln ../../Classes/MyView.swift section-1.swift
  • 关闭Xcode并再次打开Playground。
  • 现在应该有两个部分,一个是Swift类文件的内容,另一个是从头开始创建操场的示例内容。

这样我实际上可以运行躺在操场外面的代码,但是Xcode在这样做时似乎更频繁地崩溃。

编辑:

改名为6beta5,你现在可以引用项目文件,正如Rick Ballard在他的 回答.

改名的方法是在框架中导入代码。你需要做的是创建一个框架目标,在那里和你的操场上添加Swift文件

import ModuleName

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

记得制作你想看的代码 public.在操场上有可用的更改之前,您需要构建项目。(您还需要编辑playground以触发重新执行。)

重要事项

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

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

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

我无法使用这里的任何答案来使它工作,所以我开始玩,找到了一种简单的方法,可以将swift类导入到操场中。

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

例如:

enter image description here

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

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

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

Xcode8.2,Swift3.0.1,macOS Sierra

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

import ModuleName

(假设您的playground放置在与framework/project相同的工作空间中)

如果它不起作用:

  1. 重建你的项目

  2. 重新创建操场和复制所有从旧操场那里

它解决了很多奇怪的问题 init和导入失败的错误 不管怎样!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top