4.除了M_PI还有.pi
在过去,我们使用M_PI常量来表示π。所以根据半径求周长代码如下:
letr = 3.0
letcircumference = 2 * M_PI* r
在Swift3中,π提供了Float,Double与CGFloat三种形式(Float.pi、Double.pi、CGFloat.pi),所以求周长还可以这么写:
letr = 3.0
letcircumference = 2 * Double.pi * r
//我们还可以将前缀省略,让其通过类型自动推断
letr = 3.0
letcircumference = 2 * .pi * r
5.简化GCD的写法
关于GCD,过去写法采用C语言的风格,初学者可能会不大适应。比如创建一个简单的异步线程:
letqueue = dispatch_queue_create("Swift 2.2", nil)
dispatch_async(queue) {
print("Swift 2.2 queue")
}
Swift 3取消了这种冗余的写法,而采用了更为面向对象的方式:
letqueue = DispatchQueue(label: "Swift 3")
queue.async {
print("Swift 3 queue")
}
6.Core Graphics的写法也更加面向对象化
Core
Graphics是一个相当强大的绘图框架,但是和GCD一样,它原来的API也是C语言风格的。
比如我们要创建一个view,其内部背景使用Core Graphics进行绘制(红色边框,蓝色背景)。过去我们这么写:
classView: UIView{
overridefuncdrawRect(rect: CGRect) {
letcontext = UIGraphicsGetCurrentContext()
letblue = UIColor.blueColor().CGColor
CGContextSetFillColorWithColor(context, blue)
letred = UIColor.redColor().CGColor
CGContextSetStrokeColorWithColor(context, red)
CGContextSetLineWidth(context, 10)
CGContextAddRect(context, frame)
CGContextDrawPath(context, .FillStroke)
}
}
letframe = CGRect(x: 0, y: 0, width: 100, height: 50)
letaView = View(frame: frame)
在Swift 3中改进了写法,只要对当前画布上下文解包,之后的所有绘制操作就都基于解包对象。
classView: UIView{
overridefuncdraw(_ rect: CGRect) {
guard letcontext = UIGraphicsGetCurrentContext() else{
return
}
letblue = UIColor.blue.cgColor
context.setFillColor(blue)
letred = UIColor.red.cgColor
context.setStrokeColor(red)
context.setLineWidth(10)
context.addRect(frame)
context.drawPath(using: .fillStroke)
}
}
letframe = CGRect(x: 0, y: 0, width: 100, height: 50)
letaView = View(frame: frame)
7.新增的访问控制关键字:fileprivate、open
在Swift 3中在原有的3个访问控制关键字private、public、internal外。又添加了2个新关键字fileprivate、open。它们可以看成是对原来private和public的进一步细分。