Swift Playground精讲
Playground是啥?
基础讲解工欲善其事,必先利其器首先,我们先来熟悉下Playground的IDE,这是官方给出的《牛顿碰撞试验》的例子,来讲解UIKit Dynamic Animation。官方可下载的还是swift 2的版本,我把这个版本转成Swift 3,放到我的Github上了。 我们先来看看这些部分分别代表什么?
当然,playground还有其他操作区域。后面用到的时候,我们再来讲解。 第一个例子打开XCode->Get started with a playground。新建一个Playground,命名为BasicPlayground,这个完整的文件可以在这里下载到。 注意到最右侧的两个按钮,其中
这里,我们选中Show Result。 然后,我们创建一个基本类型, class Person{
var name:String
var age:UInt
init(name:String,age:UInt) {
self.name = name
self.age = age
}
}
let leo = Person(name: "Leo",age: 25)
这时候,我们选中Show result,效果如下 等等,为什么右侧的辅助编辑窗口显示的是Person,而不是直观的信息?原因是,这个类并没有实现协议 于是,我们新建一个 extension Person:CustomStringConvertible{
var description: String{
get{
return "(name) is (age) years old"
}
}
}
这时候,右侧的result area窗口显示的内容就容易理解多了。 模块划分和其他工程一样,Playground也支持模块划分。 通常,你的Playground工程划分如下:
这里,我们把Person类的定义和extension转移到Basic.swift中。 import Foundation
public class Person{
public var name:String
public var age:UInt
public init(name:String,age:UInt) {
self.name = name
self.age = age
}
}
extension Person:CustomStringConvertible{
public var description: String{
get{
return "(name) is (age) years old"
}
}
}
Tips
常用方法PlaygroundSupport//表示当前的Playground对应的Page
public static let current: PlaygroundSupport.PlaygroundPage
//是否需要无限之行,比如写一个交互式的View,那么在执行到最底部之后,仍然要继续执行。
public var needsIndefiniteExecution: Bool
//Page的LiveView,这个View会接受触摸等事件,如果liveView不为空,会自动设置needsIndefiniteExecution为true
public var liveView: PlaygroundLiveViewable?
举个例子: extension UIColor{
public static func random()->UIColor{
return UIColor(colorLiteralRed:Float.random0To1,green: Float.random0To1,blue:Float.random0To1,alpha: 1.0)
}
}
extension Float{
public static var random0To1:Float{
get{
let random = Float(arc4random() % 255)/255.0;
return random
}
}
}
Tips:
然后,新建一个 import Foundation
import UIKit
public class RandomColorView : UIView{
public override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = UIColor.random()
let tap = UITapGestureRecognizer(target: self,action: #selector(RandomColorView.handleTap(tap:)));
addGestureRecognizer(tap)
}
func handleTap(tap:UITapGestureRecognizer){
backgroundColor = UIColor.random()
}
required public init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
然后,在 let demoView = RandomColorView(frame: CGRect(x: 0,y: 0,width: 200,height: 200))
PlaygroundPage.current.liveView = demoView
然后, 效果 Markup语法Playground支持强大的markup语法,如果你之前用过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

## 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,效果如下 我们来一点点讲解细节
其中,页面间跳转这里提一下 [Previous](@previous) - 跳转到上一页
[Next](@next) - 跳转到下一页
[Go back to Main Page](MainPage) - 跳转到某一页,括号里是页面的名字。
总结总的来说,Playground非常适合
Playground资源
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |