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