Swift3新增特性(二)

4.除了M_PI还有.pi

在过去,我们使用M_PI常量来表示π。所以根据半径求周长代码如下:

letr =  3.0

letcircumference = 2 * M_PI* r

在Swift3中,π提供了FloatDoubleCGFloat三种形式(Float.piDouble.piCGFloat.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.新增的访问控制关键字fileprivateopen

Swift 3中在原有的3个访问控制关键字privatepublicinternal外。又添加了2个新关键字fileprivateopen。它们可以看成是对原来privatepublic的进一步细分。

你可能感兴趣的:(Swift3新增特性(二))