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 檔案模板