文档章节

Swift3新增特性(二)

博为峰教研组
 博为峰教研组
发布于 2017/03/31 14:58
字数 489
阅读 4
收藏 0

    

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")

}

6Core 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 的进一步细分。

 

© 著作权归作者所有

博为峰教研组
粉丝 51
博文 1224
码字总数 479077
作品 0
黄浦
程序员
私信 提问
Xcode9和Swift4新特性

XCode9新特性 1. 支持远程调试 2. Xcode绑定Github账号 3. 支持Swift类重命名 4. Swift低版本兼容 5. Main Thread Checker 6. 模拟器支持多开 7. 标示功能 8. 协议自动补全 9. 代码段自动抽出...

LvesLi
2017/10/17
0
0
AppCode 2016.3 EAP 发布,改进 Swift 解析性能

AppCode 2016.3 EAP 发布更新了,版本代号为 build 163.7743.19,该版本改进了 Swift 解析性能,Swift3 在调试器以及其他更多地方被支持。 其他更新: Swift3 的支持 与 Swift3 集合渲染相关...

局长
2016/11/11
1K
4
Swift3 concurrency

转自我的github: https://github.com/uniquejava/iOSConcurrencyDemo swift3 concurrency This repo is the steps breaking down from this [excellent tutorial][1] and an update for swif......

cyper
2016/10/27
27
0
苹果正式发布 Swift 3.0 Preview 1 版本,同时发布 Xcode 8 Beta 版

随着WWDC 2016的召开,苹果正式发布了Swift 3.0 Preview 1,这是苹果Swift 3语言的首个稳定开发者预览版。 苹果在其swift.org官方博客中称,Preview 1版本比代码库中打包的snapshot版本稳定很...

研习君
2016/06/14
8.3K
17
Facebook 针对 iOS 推出 Swift 开发者工具包

Swift3中文网消息,Facebook为iOS开发者推出了Swift开发者工具包(SDK),开发者可以通过Github链接下载https://github.com/facebook/facebook-sdk-swift。目前这一SDK基于Swift2,不过Faceboo...

研习君
2016/07/15
1K
2

没有更多内容

加载失败,请刷新页面

加载更多

ERC-777以太坊新代币标准解读

ERC777是一个新的高级代币标准,可以视为ERC20的升级版本,因此它解决了ERC20以及ERC223存在的一些问题,开发者可以根据自己的具体需求进行选型。 1、使用ERC820进行合约注册 有别于ERC20的自...

汇智网教程
53分钟前
4
0
代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
今天
5
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
今天
8
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
14
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部