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

Mar*_*uro 76 ios swift swift-playground

假设这样的设置:

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

在Playground中,可以导入UIKitimport关键字一样的模块(框架).如何从Playground启用对项目其他类的访问?

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

Ric*_*ard 56

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

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

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

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

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

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

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

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

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

  • 要复杂.Apple应该让它变得更容易. (108认同)
  • 那么,无法从应用目标导入类吗? (5认同)
  • 这在Xcode 6.1中似乎不起作用.我遵循了Ballard的上述要求,这些要求与[在这里作为教程](http://ihunter.svbtle.com/how-to-import-framework-in-playground)相呼应,并且操场中的import语句引发错误. (5认同)
  • 只需注意:您必须构建*Simulator*二进制文件.构建*Device*二进制文件无效.(Xcode版本6.3.2(6D2105)) (4认同)

Mar*_*uro 17

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

  • 创建一个空的Playground,并在您的项目下的某个位置放置.
  • YourPlayground.playground在终端中打开捆绑包(是的,它是一个bundle =目录).
  • 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>
Run Code Online (Sandbox Code Playgroud)
  • 重命名section-1.swiftsection-2.swift(如果你从头开始创建Playground section-1.swift,你的软件包中应该有一个例子)
  • 添加一个硬链接(符号链接似乎不起作用)命名section-1.swift,它将指向包外的Swift类文件,如:
ln ../../Classes/MyView.swift section-1.swift
Run Code Online (Sandbox Code Playgroud)
  • 关闭Xcode并再次打开Playground.
  • 现在应该有两个部分,一个部分包含Swift类文件的内容,另一个部分包含从头开始创建Playground的示例内容.

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

编辑:

从Xcode 6 beta 5开始,你现在可以参考项目文件了,正如Rick Ballard在他的回答中指出的那样.


nsc*_*hum 12

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

import ModuleName
Run Code Online (Sandbox Code Playgroud)

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

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

重要

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

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

我浪费了一个小时来搞清楚这一点.:)

  • 提示:无需将符号声明为"public".只需将导入标记为`@testable import ModuleName`即可 (2认同)

de *_*aad 10

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

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

例如:

在此输入图像描述

  • 这对我有用.对于其他新手,请记住还要确保将您想要在操场上使用的东西声明为"public".https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AccessControl.html - 我还没有找到一个Swift资源来弥补学习Swift(简单)和实际组织Swift项目之间的差距在XCode中(到目前为止非常不直观). (4认同)

qed*_*qed 5

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

cd /path/to/project/MyPlayground.playground/Sources
ln -s ../../*.swift .
Run Code Online (Sandbox Code Playgroud)

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

Xcode 8.2、Swift 3.0.1、macOS 塞拉利昂