假设这样的设置:
- 您有一个Xcode 6项目,在这里您已经用Objective-C和Swift实现了自己的类(例如MyView和MyViewController)
- 您已经在项目中添加了Playground
在操场上,有可能导入模块(框架),如UIKit
与import
关键字。您如何从Playground启用对项目其他班级的访问?
尝试直接访问项目类会直接导致错误消息: 使用未解析的标识符“ MyView”
假设这样的设置:
在操场上,有可能导入模块(框架),如UIKit
与import
关键字。您如何从Playground启用对项目其他班级的访问?
尝试直接访问项目类会直接导致错误消息: 使用未解析的标识符“ MyView”
Answers:
从Xcode 6.0 Beta 5开始,现在可以将自己的框架导入操场。这提供了一种在应用程序和Playground之间共享代码的方法,可以同时导入您的框架。去做这个:
您的游乐场必须与生成框架的项目位于同一工作空间中。您的工作区必须包含生成框架的目标,而不是使用预先构建的框架。
您必须已经构建了框架。如果它是iOS框架,则必须为64位运行目标(例如iPhone 5s)构建,并且必须为模拟器构建。
您必须具有一个主动方案,该方案可以构建至少一个目标(该目标的构建位置将在游乐场的框架搜索路径中使用)。
您的“构建位置”首选项(在Xcode的高级“位置”设置中)不应设置为“旧版”。
如果您的框架不是Swift框架,则必须将“定义模块”构建设置设置为“是”。
您必须在框架的操场上添加导入语句。
一旦满足所有这些条件,导入框架即可在操场上进行。
在Xcode 7中,我们引入了另一种机制,您可以使用该机制将自己的类作为源导入,而不是导入框架。您可以在http://help.apple.com/xcode/mac/8.0/#/devfa5bea3af中阅读有关“辅助源”支持的信息
通过这样做,我实际上设法引用了当前项目中的其他Swift文件:
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>
section-1.swift
为section-2.swift
(如果从头开始创建Playground,则section-1.swift
捆绑包中应该有一个示例)section-1.swift
,该链接将在捆绑包之外指向您的Swift类文件,例如:
ln ../../Classes/MyView.swift section-1.swift
这样,我实际上可以在Playground外部运行代码,但是这样做时Xcode似乎更经常崩溃。
编辑:
从Xcode 6 beta 5开始,您现在可以引用项目文件,如Rick Ballard在他的答案中所述。
style='setup'
到<code>
标签,它将显示为可折叠/可扩展的块,可能更理想,因为它在某种程度上隐藏了多余的文件。
从Xcode 6的Beta 5开始,可以将您的代码导入框架中。您需要做的是创建一个框架目标,在其中添加Swift文件,然后在您的操场上
import ModuleName
您可以在构建设置中查找模块名称。通常与目标名称相同。
记住编写您想看的代码public
。您需要先构建项目,然后才能在操场上进行更改。(您还需要编辑操场以触发重新执行。)
不要给游乐场文件指定与目标相同的名称!如果这样做,导入似乎可以正常工作,但是在游乐场尝试执行时会出现以下错误:
游乐场执行失败:错误:无法查找符号:
我花了一个小时才弄清楚这一点。:)
public
。只需将您的进口商品标记为@testable import ModuleName
public
要在操场上使用的东西。developer.apple.com/library/ios/documentation/Swift/Conceptual / ...-我尚未找到一种Swift资源,可以弥补学习Swift(简单)和实际在XCode中组织Swift项目之间的鸿沟(到目前为止非常不直观) 。
我只是将指向我所有swift文件的链接放在该Sources
文件夹中:
cd /path/to/project/MyPlayground.playground/Sources
ln -s ../../*.swift .
这样,源文件中的更改将立即在您的游乐场中生效。做得非常好。
Xcode 8.2,Swift 3.0.1,macOS Sierra