Swift开发第三篇——Playground
本篇分为两部分:
一、Playground的延时运行
二、Playground的可视化
一、Playground的延时运行
Playground 就是提供一个可以即时编译的类似 REPL 的环境,他为我们提供了一个顺序执行的环境,在每次更改其中代码后整个文件都会被重新编译,并清空原来的状态并运行。
NSTimer 在默认的 Playground 中是不会执行的:
class TestClass {
@objc func callMe() {
print("Hi")
}
}
let object = TestClass()
NSTimer.scheduledTimerWithTimeInterval(, target: object,
selector: "callMe", userInfo: nil, repeats: true)
在执行玩 NSTimer 语句之后,整个 Playground 将停止掉,Hi 永远不会被打印出来。Playground 执行完了所有语句,然后正常退出了。为了使 Playground 具有延时运行的本领,我们需要引入 Playground 的扩展包“XCPlayground” 框架,其中包含了能使 Playground 延时执行的黑魔法:XCPSetExecutionShouldContinueIndefinitely,只需在刚刚的代码上面加上:
import XCPlayground XCPSetExecutionShouldContinueIndefinitely(true)
二、Playground的可视化
在 Playground 中进行可视化演示只需使用XCPlayground框架的XCPCaptureValue方法来实现,在屏幕上呈现每一步算法的步骤。
import XCPlayground
var arr = [, , , , , , , , , ,
, , , , , , , , , ]
func plot<T>(title: String, array: [T]) {
for value in array {
XCPCaptureValue(title, value: value)
}
}
plot("起始", array: arr)
func swap(inout x: Int, inout y: Int) {
(x, y) = (y, x)
}
func bubbleSort<T: Comparable>(inout input: [T]) {
for var i = input.count; i > ; i-- {
var didSwap = false
for var j = ; j < i - ; j++ {
if input[j] > input[j + ] {
didSwap = true
swap(&input[j], &input[j + ])
}
}
if !didSwap {
break
}
plot("第 \(input.count - (i - 1)) 次迭代", array: input)
}
plot("结果", array: input)
}
bubbleSort(&arr)
Swift开发第三篇——Playground的更多相关文章
- Swift开发学习(两):Playground
Swift开发学习:Playground 大约 对于软件用户.游戏玩家,我一直提倡用户体验.也是用户,是各种开发工具的使用者.也会喜欢用户体验做得好的工具软件.这次苹果想开发人员所想,提供了一个能够玩 ...
- Swift开发学习(二):Playground
http://blog.csdn.net/powerlly/article/details/29674253 Swift开发学习:Playground 关于 对于软件用户.游戏玩家,大家一直都在提倡用 ...
- Swift开发第十篇——可变参数函数&初始化方法顺序
本篇分为两部分: 一.Swift中的可变参数函数 二.初始化方法的顺序 一.Swift中的可变参数函数 可变参数函数指的是可以接受任意多个参数的函数,在 OC 中,拼接字符串的函数就属于可变参数函数 ...
- Swift开发第七篇——字面量转换&下标
本篇分为两部分: 一.Swift 中的字面量转换 二.Swift 中的下标 一.Swift 中的字面量转换 所谓字面量就是指像特定的数字,字符串或者是布尔值这样能够直接了当地指出自己的类型并未变量进行 ...
- Swift开发第八篇——方法嵌套&命名空间
本篇分为两部分: 一.Swift中的方法嵌套 二.Swift中的命名空间 一.Swift中的方法嵌套 在 swift 中我们可以让方法嵌套方法,如: func appendQuery(var url: ...
- Swift开发第五篇——四个知识点(Struct Mutable方法&Tuple&autoclosure&Optional Chain)
本篇分三部分: 一.Struct Mutable方法 二.多元组(Tuple) 的使用 三.autoclosure 的使用 四.Optional Chain 的使用 一.Struct Mutable方 ...
- Swift开发第六篇——操作运算符也可以重载& func 的参数修饰
本篇分为两部分: 1.Swift 中重载操作运算符的使用 2.Swfit 中 func 的参数修饰 1.Swift 中重载操作运算符的使用 与别的语言不同,Swift 支持运算符的重载,运算符指的是“ ...
- Swift开发第十一篇——Designated、Convenience和Required
本篇主要讲解 Swift 中 Designated.Convenience和 Required 的使用: 在 OC 中 init 方法是非常不安全的,没人能够保证 init 只被调用一次,也没有人保证 ...
- Swift开发第四篇——柯里化
本篇分为两部分: 一.柯里化的基本使用 二.柯里化的使用场景 一.柯里化的基本使用 柯里化(Currying):也就是把接受多个参数的方法变换成接受第一个参数的方法,并且返回接受余下的参数并且返回结果 ...
随机推荐
- MyBatis知多少(5)业务对象模型
几乎所有结构良好的软件都使用了分层设计.分层设计将一个应用程序根据技术职能分为几 个内聚的部分,从而将某种特定技术或接口的实现细节与其他部分分离开来.分层设计可以用任 何一种强壮的编程语言来实现.图1 ...
- 编写高质量JS代码的68个有效方法(三)
[20141030]编写高质量JS代码的68个有效方法(三) *:first-child { margin-top: 0 !important; } body>*:last-child { ma ...
- 调用Ajax返回500错误的解决方法
看代码: public ActionResult UserLogin(LogOnModel model) { #region 验证码验证 #endregion OperationResult resu ...
- R Language
向量定义:x1 = c(1,2,3); x2 = c(1:100) 类型显示:mode(x1) 向量长度:length(x2) 向量元素显示:x1[c(1,2,3)] 多维向量:multi-dimen ...
- JS魔法堂:精确判断IE的文档模式by特征嗅探
一.前言 苦逼的前端攻城狮都深受浏览器兼容之苦,再完成每一项功能前都要左顾右盼,生怕浏览器不支持某个API,生怕原生API内含臭虫因此判断浏览器类型和版本号成了不可绕过的一道关卡,而特征嗅探是继浏览器 ...
- Studio for ASP.NET Wijmo:使用 C1Pager 对 DataList 控件分页
Studio for ASP.NET Wijmo 控件值得称赞的一点是它不仅仅单独为 C1 控件而开发.还可以配合其他控件使用,也正体现了C1控件为提高开发人员工作效率而设计的宗旨.简单的举一个例子, ...
- uml中的几种关系
这是一堂关于UML基础知识的补习课:现在我们做项目时间都太紧了,基本上都没有做过真正的class级别的详细设计,更别提使用UML来实现规范建模了:本篇主要就以前自己一直感觉很迷糊的几种class之间的 ...
- treap树---Double Queue
HDU 1908 Description The new founded Balkan Investment Group Bank (BIG-Bank) opened a new office i ...
- spring aop advice
1.前置通知(BeforeAdvice): import java.lang.reflect.Method; import org.springframework.aop.MethodBeforeAd ...
- jetty加载spring-context容器源码分析
带着疑问开始 web.xml的顺序问题 先拿一个最简单的spring mvc web.xml来说问题,如下图:如果我将三者的顺序倒置或是乱置,会产生什么结果呢? 启动报错?还是加载未知结果?还是毫无影 ...