代碼出處: Swift Tips 023 by John Sundellgit
爲了使 Playground 具備延時運行的本領,咱們須要引入 Playground 的 「擴展包」 PlaygroundSupport 框架。如今這個框架中包含了幾個與 Playground 的行爲交互以及控制 Playground 特性的 API,其中就包括使 Playground 能延時執行的黑魔法,PlaygroundPage 和 needsIndefiniteExecution。github
Playground 中的代碼是頂層代碼(top-level code),也就是它是在於全局做用域中的。這些代碼將會從上到下執行,並在執行完畢以後當即中止。編程
咱們的異步回調代碼通常都沒法在程序結束以前得到執行,所以若是咱們在 Playground 執行網絡,或者其它耗時的異步操做,都沒法得到咱們想要的結果。swift
爲了讓程序在代碼執行結束後繼續執行,咱們可使用以下代碼:網絡
PlaygroundPage.current.needsIndefiniteExecution = true
複製代碼
這句代碼會讓 Playground 永遠執行下去 ,當咱們獲取了須要的結果後,可使用 PlaygroundPage.current.finishExecution()
中止 Playground 的執行:session
import PlaygroundSupport
import Foundation
import UIKit
PlaygroundPage.current.needsIndefiniteExecution = true
let url = URL(string: "http://xxx/image/png")!
let session = URLSession.shared
let task = session.dataTask(with: url) { (data, _, _) in
let image = UIImage(data: data!)
PlaygroundPage.current.finishExecution()
}
task.resume()
複製代碼
一般狀況下,咱們直接在 Playground 上面寫代碼,而後編譯器會實時編譯咱們代碼,並將結果顯示出來。這很好,咱們能夠實時獲得代碼的反饋。app
可是這也會產生一個問題,若是咱們寫了一個函數,或者自定義了一個 view,這部分代碼通常狀況下是不會變的,而編譯器卻會一次又一次地去編譯這些代碼,最終的結果就是致使效率的低下。框架
這時,Sources 目錄就派上用場了,使用 Cmd
+ 1
打開項目導航欄,能夠看到一個 Sources 目錄。放到此目錄下的源文件會被編譯成 module 並自動導入到 Playground 中,而且這個編譯只會進行一次(或者咱們對該目錄下的文件進行修改的時候),而非每次你敲入一個字母的時候就編譯一次。 這將會大大提升代碼執行的效率。異步
可是請注意!async
因爲此目錄下的文件都是被編譯成模塊導入的,只有被設置成 public 的類型,屬性或方法才能在 Playground 中使用。
Swift 語言是蘋果在 WWDC 14 上正式發佈的,與之同時發佈的 Xcode 6 中也第一次集成了 Playground 功能。兩年後的 WWDC 16 上,蘋果發佈了 iPad 專有的 Swift Playground 軟件,幫助你們更好地學習使用 Swift 語言。到今年,Xcode Playground 已經 5 歲了。
這些年 Playground 一直進步,這一點能夠在每一年的 WWDC 上獲得驗證,由於你總能發現一些關於它的獨立 Session。
今年關於 Playground 的 Session 叫作 Swift Playgrounds 3,經過這個 session 咱們能夠明顯感受到使用 iPad 上的 Playground 進行編程是十分便利的,也很是有趣,由於這種開發體驗是獨一無二的,它讓開發者與硬件的交互變得更加緊密。
讓咱們假設一個場景,若是咱們要開發一個與 加速計、陀螺儀相關的 Demo!
一般咱們須要在 Xcode 裏面編寫相關代碼,註冊開發者帳號,鏈接真機,編譯代碼,等待安裝,才能開始真正調試。想一想這一連串的步驟就讓人頭大,不是麼?
而如今,只須要在 Playground 上編寫便可直接運行調試。
因此說了這麼多,不妨把你吃灰已久的 iPad 拿出來把玩一下吧,相信你必定會愛上 Swift Playground 的!