您的位置:首页 > 移动开发 > Swift

Swift3新增特性(二)

2017-03-31 00:00 211 查看




4.除了M_PI 还有 .pi

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

let r = 3.0

let circumference = 2 * M_PI * r

Swift3 中,π 提供了 FloatDouble CGFloat 三种形式(Float.piDouble.piCGFloat.pi),所以求周长还可以这么写:

let r = 3.0

let circumference = 2 * Double.pi * r

//我们还可以将前缀省略,让其通过类型自动推断

let r = 3.0

let circumference = 2 * .pi * r

5.简化GCD的写法
关于 GCD,过去写法采用 C 语言的风格,初学者可能会不大适应。比如创建一个简单的异步线程:

let queue = dispatch_queue_create("Swift 2.2", nil)

dispatch_async(queue) {

print("Swift 2.2 queue")

}

Swift 3 取消了这种冗余的写法,而采用了更为面向对象的方式:

let queue = DispatchQueue(label: "Swift 3")
queue.async {
print("Swift 3 queue")
}
6. Core Graphics的写法也更加面向对象化

Core

Graphics是一个相当强大的绘图框架,但是和 GCD 一样,它原来的 API 也是 C 语言风格的。
比如我们要创建一个 view,其内部背景使用 Core Graphics 进行绘制(红色边框,蓝色背景)。过去我们这么写:

class View: UIView {

override func drawRect(rect: CGRect) {

let context = UIGraphicsGetCurrentContext()

let blue = UIColor.blueColor().CGColor

CGContextSetFillColorWithColor(context, blue)

let red = UIColor.redColor().CGColor

CGContextSetStrokeColorWithColor(context, red)

CGContextSetLineWidth(context, 10)

CGContextAddRect(context, frame)

CGContextDrawPath(context, .FillStroke)

}

}

let frame = CGRect(x: 0, y: 0, width: 100, height: 50)

let aView = View(frame: frame)

Swift 3 中改进了写法,只要对当前画布上下文解包,之后的所有绘制操作就都基于解包对象。

class View: UIView {

override func draw(_ rect: CGRect) {

guard let context = UIGraphicsGetCurrentContext() else {

return

}

let blue = UIColor.blue.cgColor

context.setFillColor(blue)

let red = UIColor.red.cgColor

context.setStrokeColor(red)

context.setLineWidth(10)

context.addRect(frame)

context.drawPath(using: .fillStroke)

}

}

let frame = CGRect(x: 0, y: 0, width: 100, height: 50)

let aView = View(frame: frame)

7.新增的访问控制关键字fileprivateopen
Swift 3 中在原有的 3 个访问控制关键字 privatepublicinternal 外。又添加了2个新关键字 fileprivateopen。它们可以看成是对原来 private public 的进一步细分。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Swift3 新增 特性