代码出处: 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 的!