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 還支持各類格式的資源,包括音頻,視頻,圖片等等。並且,你既能夠用標記語言引用這些資源,也能夠用代碼來引用。好比:編輯器
// 你能夠用標記語言引用圖片資源 ![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 中的一個新功能,鼠標在 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 的相關資源: