WWDC18: 402: Getting the Most out of Playgrounds in Xcode
Swift 语言是苹果在 WWDC14 上正式发布的,与之同时发布的 Xcode6 中也第一次集成了 Playground 功能。两年后的 WWDC16 上,苹果发布了 iPad 专有的 Swift Playground 软件,帮助年轻人更好地学习使用 Swift 语言。今年的 WWDC18 上,苹果再次跟我们聊了聊“充分利用 Xcode 的 Playground 功能”。苹果如此不遗余力地推广 Swift 语言,如果这样还无法让你下定决心拥抱这门属于未来的语言,估计苹果也得急哭了。
更新不多,重点是机器学习
这次大会上发布的 Xcode 10中关于 Playground 的更新并不多,但有一个重点是 Playground 用来训练机器学习的模型,只要 import 新的Create ML 框架 即可。微博上已经有大佬玩了起来,看起来很厉害。
下面是 Xcode 10 中关于 Playground 的更新内容:
为机器学习量身打造的 Playground
- 类 REPL 模式(Read-Eval-Print-Loop)可以快速重新运行已有的 playground 代码;
- 运行指定行之前的代码,或者“shift+回车”运行刚写的代码;
- Import 新的Create ML 机器学习框架 交互式地训练新的模型,在 playground 中写代码测试模型。完成之后,直接将模型运用在应用中。
关于 Create ML 框架这次大会上有一个单独的会场。
基本功能
关于 playground 一些基本的介绍可以查看官方的帮助文档。 Playground 的一些基本用法包括Live View和Markup标记语言。
Live View
我们可以在 Playground 中可视化地查看自己的视图。实现起来也很简单:
import PlaygroundSupport
let viewController = /* 你的试图控制器 */
PlaygroundPage.current.liveView = viewController
复制代码
可以使用 Live View 快速测试自己想要做的动画或特效。这种形式非常适合学习官方 API,或者制作教程。国外著名设计师Meng To 的《Design+Code》教程中的动画设计部分就是用 playground 写的,每一行代码产生的效果都可以直接在 Live View 中看到,十分直观。
Markup
Playground 是支持 markdown 注释渲染的,只需要在单行或多行注释的后面添加冒号即可。某种意义上来说,你可以把 Playground 当成 markdown 编辑器来用。同时,Playground 还支持各种格式的资源,包括音频,视频,图片等等。而且,你既可以用标记语言引用这些资源,也可以用代码来引用。比如:
// 你可以用标记语言引用图片资源
![alternate text](MyPicture.jpg "hover title")
// 也可以直接用代码引用
let image = UIImage(named: "image.jpg")
复制代码
Playground 支持多页面,新建 Playground Page 即可。同时页面之间的跳转也十分简单,有三种方式:
[上一页](@previous)
[下一页](@next)
[指定页](PageName)
复制代码
渲染起来也十分简单,打开右边栏,勾选“文件检查器”(file inspector)中的“Render Documentation”即可。
详细的标记语言语法参见苹果官方文档。同时,苹果官方有一个 Swift 语言标准库文档的 playground 文件模板,可以参观学习一下,说不定我们也可以试试用 playground 写文档。
按步运行(Xcode 10 新功能)
按步运行是 Xcode 10 中的一个新功能,鼠标在 Playground 的代码行移动时,行号那一列会变成蓝色播放键。点击行号上的播放键即可运行当前行以上的代码(包括当前行)。
已经运行过的代码播放键会变成灰色,如果鼠标所在行不形成一个完整的代码块(例如位于一个循环语句中)播放键也会显示为灰色。
这里要注意的一点是,已经执行过的代码不会再次运行。如果需要再次运行,需要点击下方 Debug 工具栏的 Stop 按钮。 重置 Playground 之后我们会发现之前运行过的代码前面的行号重新变成了蓝色,即“可运行”的状态。
那么在什么样的情况下建议使用 playground 呢?开发团队也给了建议:
- 自家 api 的按步骤的使用教程
- 处理一些数据的时候,比如地图数据,公开统计数据,班级作业等等
- 测试游戏 demo或者测试应用动画的时候
高级技巧
自定义显示类型
Xcode 9.3/Swift 4.1 中CustomPlaygroundDisplayConvertible
替代了之前的CustomPlaygroundQuickLookable
。可以通过CustomPlaygroundDisplayConvertible
协议自定义 Playground 中的返回值显示类型。
extension MyType: CustomPlaygroundDisplayConvertible {
var playgroundDescription: Any { ... }
}
复制代码
下面的这段代码把Pitch
的返回值重新定义为一个视图。
import xxx
let pitch = Pitch(.a, 4)
// 自定义返回类型为视图
extention Pitch : CustomPlaygroundDisplayConvertible {
public var playgroundDescription: Any {
// 创建视图并定义视图属性
let view = createView()
view.noteNumber = noteNumber
view.octave = octave
view.customText = description
//返回视图
return view
}
}
复制代码
运行结果如下:
自定义类型可以是 Xcode 9.3/Swift 4.1支持的所有类型。
Playground 中使用自定义框架
引用自定义框架的方法也很简单。如果是简单的一个框架,直接把 Playground 文件拖到工程中即可。
如果是多个框架,把多个框架放在一个 workspace 里,然后再把 Playground 文件拖进去即可。
引用框架直接 import 即可。
最后,开发团队的人说他们的愿景是:
明年,每个工程里面都有一个 Playground 文件!
你觉得他们的愿景会实现吗?
总的来说,Playground 的使用场景还是聚焦在学习和试玩的层面,毕竟交互式的界面设计可以让学习者很快看到自己代码的结果,这样反馈对初期学习是十分重要的。我们也看到开发团队也做了很多努力,让我们在 Playground 中的东西可以直接应用到正式工程中。
所以,就像第二位讲者说的一样,Playground 是个“有趣”(fun)的地方,但是它是“严肃的乐趣”(serious fun),因为里面的东西都是可以复用的。Xcode 的 Playground 是苹果给开发者的一片游乐场,可劲儿玩吧!
PS,下面是本文涉及到的 Xcode Playground 的相关资源:
- Github 上一个收集各类优秀 Playground 的 Repo
- 苹果官方 Xcode 帮助文档
- 苹果 Markup 语法文档
- 苹果 Swift 语言标准库文档的 Playground 文件模板