Swift-PlayGround简介

Playground是啥?

​ Swift Playground是苹果发布于2016年6月14日的一款轻量级的交互编程应用,特点:

  1. 实时预览代码的效果
  2. 可进行快速的原型开发和试错

基础部分

模块划分

首先,我们先来熟悉下Playground的IDE,和其他工程一样,Playground也支持模块划分!


屏幕快照 2017-05-26 上午12.19.20.png

​ 通常工程划分如下:

  1. MyPlayground

    运行上文提到的代码的地方

  2. Sources 目录

源文件文件夹,存放类,通常情况下,我们直接在 Playground 上面写代码,编译器会实时编译我们代码,并将结果显示出来。但会产生一个问题,如果我们写了一个函数,或者自定义了一个 view,这部分代码一般情况下是不会变的,而编译器却会一次又一次地去编译这些代码,最终的结果就是导致效率的低下。如果放到此目录下的源文件会被编译成模块(module)并自动导入到 Playground 中,并且这个编译只会进行一次(或者我们对该目录下的文件进行修改的时候),而非每次编译。 这将会大大提高代码执行的效率。

  1. Resources

    资源文件夹,图片,plist等资源文件存放目录

使用Playground

打开XCode->Get started with a playground,新建一个Playground,当我们把鼠标移动到辅助窗口的“hello playground”上面的时候,这时候的实时效果如下

屏幕快照 2017-05-26 上午1.06.48.png

注意到最右侧的两个按钮,其中:

屏幕快照 2017-05-26 上午1.07.48.png

​ 1表示Quick Look。点击的时候可以预览这个变量的值或者视图(View/ViewController)的效果。

​ 2表示Show Result。选中后,代码的下一行inline的显示对应的值。

实时预览视图效果,需打开Assistant editor

ass.jpg

关于实时编译

想重新运行动画只需要改变playground中的任何一处即可,也可以点击在playground底部的按钮,如果不想playground进行自动编译,则长按按钮 选择 Manually Run

屏幕快照 2017-05-26 上午12.14.15.png

实时编译效果预览

添加一段代码到playground中,并运行代码

//动画
let containerView = UIView(frame: CGRect(x:0, y:0, width:700, height:700));

containerView.backgroundColor = UIColor.white;

var square = UIView.init(frame: CGRect(x: 0, y: 0, width: 50, height: 50));
square.backgroundColor = UIColor.blue;

containerView.addSubview(square)

UIView.animate(withDuration: 2.0) {
    square.backgroundColor = UIColor.red
    square.frame = CGRect(x: 200, y: 400, width: 100, height: 100)
};

PlaygroundPage.current.liveView = containerView;

效果如下图

QQ20170607-172850-HD.gif

结合项目实际调试

在Swift项目进行代码调试有如下两种方法:

  1. 在Swift项目中添加playground,并复制对应代码到playground下,或者将.swift文件添加到Resource目录下,并且对其进行调用

  2. 先创建当前Swift工程的framework,然后再创建playground,并且对当前的framework进行引用

    屏幕快照 2017-06-07 下午5.36.23.png

    若然不勾选动态库的引用,playground则无法导入并且读取项目中的代码

屏幕快照 2017-06-07 下午5.35.12.png

但是最重要的问题在于,如果需要调试的代码部分不是直接放在Playground内都必须声明为Public

public class UCSTestVC: UITableViewController
{
    override public func viewDidLoad() {
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
    }
}

3.网络请求调试

支持 Markdown

Playground 支持原生 markdown语法,如果你之前用过markdown,你会发现这些语法非常熟悉。可以有以下两种方式书写marup语言块,就是在普通注释后面加一个冒号。

一行markup语言

//: 开启一行markup

markup块

/*:

*/

先看一个常见的用法

//: [Previous](@previous)

/*:
 # Usage 
 
 ## Unordered List
 - First Item
 - Secound Item
 
 ## ordered List
  1. First Item
  2. Secound Item
 
 ## Note
 > This is a note
 ---
 
 ## Image
 ![](image.png "Local image")
 
 ## Link
 * [How about a link](https://github.com/LeoMobileDeveloper)
 
 ## Bold/italic
 So my name is **Leo**,you notice that Leo is bold, and this word *italic* is italic.
 
 [Go back to Main Page](MainPage)
*/

这时候,选择Editor -> Show Rendered Markup,即可看到运行效果,如下

![](pic/屏幕快照 2017-06-07 下午5.57.10.png)

页面跳转

Playground 支持三种方式的页面跳转:
  1. 上一页
  2. 下一页
  3. 跳转到指定页

页面顺序都是根据它们在项目文件中的排序来决定的。

上一页与下一页的语法:

//: ["Go to Next Page"](@next)

//: ["Go to Previous Page"](@previous)

与 markdown 中的超链接类似,方括号中的代码要显示的文字,而小括号则代表跳转的目的地。

指定页跳转:

//: ["Go to The End"](PageName)

PageName 代表目标页面的名称,如果页面名称中有空格,则需要使用%20来代替,这是 ASCII 中空格的符号。如下:

//: ["Go to The End"](Last%20Page)

引用

  1. 导入playground到Swift项目工程目录下

    https://useyourloaf.com/blog/adding-playgrounds-to-xcode-projects/

  2. 调试三方库插件 && XCTest

    https://github.com/JohnSundell/TestDrive

    https://github.com/Liquidsoul/XCTestPlayground

  3. swift-summary 官方Playground总结

  4. 2048游戏

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容