玩轉 Xcode 中的 Playground

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 ViewMarkup標記語言。app

Live View

咱們能夠在 Playground 中可視化地查看本身的視圖。實現起來也很簡單:框架

import PlaygroundSupport
let viewController = /* 你的試圖控制器 */

PlaygroundPage.current.liveView = viewController
複製代碼

可使用 Live View 快速測試本身想要作的動畫或特效。這種形式很是適合學習官方 API,或者製做教程。國外著名設計師Meng To 的《Design+Code》教程中的動畫設計部分就是用 playground 寫的,每一行代碼產生的效果均可以直接在 Live View 中看到,十分直觀。機器學習

Live View Demo

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」便可。

Render

詳細的標記語言語法參見蘋果官方文檔。同時,蘋果官方有一個 Swift 語言標準庫文檔的 playground 文件模板,能夠參觀學習一下,說不定咱們也能夠試試用 playground 寫文檔。

按步運行(Xcode 10 新功能)

按步運行是 Xcode 10 中的一個新功能,鼠標在 Playground 的代碼行移動時,行號那一列會變成藍色播放鍵。點擊行號上的播放鍵便可運行當前行以上的代碼(包括當前行)。

Blue button

已經運行過的代碼播放鍵會變成灰色,若是鼠標所在行不造成一個完整的代碼塊(例如位於一個循環語句中)播放鍵也會顯示爲灰色。

Grey button

這裏要注意的一點是,已經執行過的代碼不會再次運行。若是須要再次運行,須要點擊下方 Debug 工具欄的 Stop 按鈕。 重置 Playground 以後咱們會發現以前運行過的代碼前面的行號從新變成了藍色,即「可運行」的狀態。

reset

那麼在什麼樣的狀況下建議使用 playground 呢?開發團隊也給了建議:

  1. 自家 api 的按步驟的使用教程
  2. 處理一些數據的時候,好比地圖數據,公開統計數據,班級做業等等
  3. 測試遊戲 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
    }
}

複製代碼

運行結果以下:

CustomDisplay

自定義類型能夠是 Xcode 9.3/Swift 4.1支持的全部類型。

Support Types

Playground 中使用自定義框架

引用自定義框架的方法也很簡單。若是是簡單的一個框架,直接把 Playground 文件拖到工程中便可。

Single

若是是多個框架,把多個框架放在一個 workspace 裏,而後再把 Playground 文件拖進去便可。

Multiple

引用框架直接 import 便可。

import

最後,開發團隊的人說他們的願景是:

明年,每一個工程裏面都有一個 Playground 文件!

你以爲他們的願景會實現嗎?


總的來講,Playground 的使用場景仍是聚焦在學習和試玩的層面,畢竟交互式的界面設計可讓學習者很快看到本身代碼的結果,這樣反饋對初期學習是十分重要的。咱們也看到開發團隊也作了不少努力,讓咱們在 Playground 中的東西能夠直接應用到正式工程中。

因此,就像第二位講者說的同樣,Playground 是個「有趣」(fun)的地方,可是它是「嚴肅的樂趣」(serious fun),由於裏面的東西都是能夠複用的。Xcode 的 Playground 是蘋果給開發者的一片遊樂場,可勁兒玩吧!

PS,下面是本文涉及到的 Xcode Playground 的相關資源:

  1. Github 上一個收集各種優秀 Playground 的 Repo
  2. 蘋果官方 Xcode 幫助文檔
  3. 蘋果 Markup 語法文檔
  4. 蘋果 Swift 語言標準庫文檔的 Playground 文件模板
相關文章
相關標籤/搜索