如何从自己的项目导入自己的类到游乐场
假设这样的设置:
- 你有一个Xcode 6项目,你已经实现了你自己的类(比如说MyView和MyViewController),Objective-C和Swift
- 你已经添加了一个游乐场到你的项目
在Playground中,可以使用import
关键字import
像UIKit
这样的模块(框架)。 你如何从游乐场启用项目的其他课程?
只是试图直接访问项目类的结果与一个错误消息: 使用未parsing的标识符'MyView'
从Xcode 6.0 Beta 5开始,现在可以将自己的框架导入游乐场。 这提供了一种在应用程序和游乐场之间共享代码的方法,它们都可以导入您的框架。 去做这个:
-
您的游乐场必须与生成框架的项目位于同一个工作区中。 您的工作空间必须包含生成框架的目标,而不是使用预先构build的框架。
-
你必须已经build立你的框架。 如果它是iOS框架,则必须为64位运行目标(例如iPhone 5s)构build,并且必须为Simulator构build。
-
你必须有一个至less构build一个目标的活动scheme(目标的构build位置将被用于操场的框架searchpath)。
-
您的“生成位置”首选项(在Xcode的高级“位置”设置中)不应设置为“传统”。
-
如果您的框架不是Swift框架,则“定义模块”构build设置必须设置为“是”。
-
您必须为该框架添加一条导入语句到您的操场。
一旦所有这些条件得到满足,导入你的框架将在一个操场上工作。
在Xcode 7中,我们引入了另一种机制,可以用来导入自己的类作为源代码,而不是导入框架。 您可以在http://help.apple.com/xcode/mac/8.0/#/devfa5bea3af上阅读有关“辅助资源”的支持;
我实际上设法通过这样做来引用当前项目中的其他Swift文件:
- 创build一个空的游乐场,并放置在您的项目下的某个地方。
- 在
YourPlayground.playground
打开YourPlayground.playground
包(是的,它是一个bundle =目录)。 - 例如用
vi
编辑contents.xcplayground
,然后添加另一个部分:
<?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
(如果你从零开始创build了Playground,则应该有一个示例section-1.swift
在你的包中) - 添加一个名为
section-1.swift
的硬链接 (符号链接似乎不起作用),它将指向包之外的Swift类文件,如:
ln ../../Classes/MyView.swift section-1.swift
- closuresXcode并再次打开Playground。
- 现在应该有两个部分,一个是Swift类文件的内容,另一个是从头创buildPlayground的示例内容。
通过这种方式,我实际上可以运行在Playground之外的代码,但是当像这样做时,Xcode似乎更频繁地崩溃。
编辑:
从Xcode 6 beta 5开始,您现在可以参考项目文件,正如Rick Ballard在他的回答中所指示的那样。
由于Xcode 6的Beta 5,如果它在一个框架中,可以导入你的代码。 你需要做的是创build一个框架目标,在你的游乐场里添加Swift文件
import ModuleName
您可以在构build设置中查找模块名称。 通常与目标名称相同。
记得把你想要看的public
的代码。 您需要在操场上有更改之前构build项目。 (您还需要编辑操场以触发重新执行。)
重要
不要给操场文件命名为目标! 如果你这样做,导入似乎工作,但当操场试图执行时,你会得到以下错误:
游乐场执行失败:错误:无法查找符号:
我花了一个小时就搞清楚了。 🙂
我无法使用任何答案在这里工作,所以我开始玩耍,find了一个简单的方法,为我导入一个快速的类到游乐场。
只要在你的项目中创build一个游乐场,在里面有一个名为“sources”的目录,只需将一个swift类的副本拖到该文件夹中,游乐场就可以访问它。
例如:
我只是把所有我的swift文件链接到Sources
文件夹中:
cd /path/to/project/MyPlayground.playground/Sources ln -s ../../*.swift .
这样,你的源文件的改变将立即在你的游乐场生效。 工作很好 。
Xcode 8.2,Swift 3.0.1,macOS Sierra
所有你需要做的 – 写在开头:
import ModuleName
(假设你的操场和框架/项目放在同一个工作区)
如果这不起作用:
-
重build你的项目
-
重新创build游乐场,并从那里的旧操场复制
它解决了很多奇怪的错误 ,无论初始化和导入任何!