假设这样的设置:
- 你有一个 Xcode 6 项目,你已经用 Objective-C 和 Swift 实现了你自己的类(比如 MyView 和 MyViewController)
- 您已将 Playground 添加到您的项目中
在 Playground 中,可以UIKit
使用import
关键字导入模块(框架)。您如何允许从 Playground 访问项目的其他类?
只是尝试直接访问项目类会导致错误消息: 使用未解析的标识符“MyView”
假设这样的设置:
在 Playground 中,可以UIKit
使用import
关键字导入模块(框架)。您如何允许从 Playground 访问项目的其他类?
只是尝试直接访问项目类会导致错误消息: 使用未解析的标识符“MyView”
从 Xcode 6.0 Beta 5 开始,现在可以将您自己的框架导入到 Playground 中。这提供了一种在应用程序和 Playground 之间共享代码的方法,它们都可以导入您的框架。去做这个:
您的 Playground 必须与生成您的框架的项目位于同一工作区。您的工作区必须包含生成框架的目标,而不是使用预构建的框架。
您必须已经构建了框架。如果是 iOS 框架,则必须为 64 位运行目标(例如 iPhone 5s)构建,并且必须为 Simulator 构建。
您必须有一个构建至少一个目标的活动方案(该目标的构建位置将用于游乐场的框架搜索路径)。
您的“构建位置”首选项(在 Xcode 的高级“位置”设置中)不应设置为“旧版”。
如果您的框架不是 Swift 框架,则“定义模块”构建设置必须设置为“是”。
您必须为框架添加一个导入语句到您的游乐场。
一旦满足所有这些条件,导入您的框架将在操场上工作。
在 Xcode 7 中,我们引入了另一种机制,您可以使用该机制将自己的类作为源导入,而不是导入框架;您可以在http://help.apple.com/xcode/mac/8.0/#/devfa5bea3af阅读有关此“辅助资源”支持的信息
通过这样做,我实际上设法引用了当前项目中的其他 Swift 文件:
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
通过这种方式,我实际上可以运行位于 Playground 之外的代码,但 Xcode 在这样做时似乎更频繁地崩溃。
编辑:
从 Xcode 6 beta 5 开始,您现在可以引用项目文件,正如 Rick Ballard 在他的回答中所指示的那样。
从 Xcode 6 的 Beta 5 开始,如果代码位于框架中,则可以导入代码。您需要做的是创建一个框架目标,在其中添加 Swift 文件,然后在您的 Playground 中执行
import ModuleName
您可以在构建设置中查找模块名称。它通常与目标名称相同。
记得制作你想看的代码public
。您需要先构建项目,然后才能在 Playground 中进行更改。(您还需要编辑 Playground 以触发重新执行。)
不要给操场文件与目标同名!如果这样做,导入似乎可以工作,但是当 Playground 尝试执行时,您会收到以下错误:
Playground 执行失败:错误:无法查找符号:
我浪费了一个小时来弄清楚这一点。:)
我只是将所有 swift 文件的链接放在文件Sources
夹中:
cd /path/to/project/MyPlayground.playground/Sources
ln -s ../../*.swift .
这样,源文件中的更改将立即在您的 Playground 中生效。工作得很好。
Xcode 8.2、Swift 3.0.1、macOS Sierra
您所要做的就是在开头写下:
import ModuleName
(假设您的游乐场与框架/项目位于同一工作区)
重建你的项目
重新创建游乐场并从那里的旧游乐场复制所有内容
它解决了许多初始化失败和导入任何东西的奇怪错误!