Swift 3.1 的一些新特性
Swift 3.1 的一些新特性
推荐序
本文来自泊学的投稿,介绍了 Swift 3.1 的新特性,感谢泊学授权发表。以下为文章正文。
正文
Apple 终于发布了Xcode 8.3以及Swift 3.1。如果你没时间仔细通读一遍release note,至少,Swift 3.1中的一些新特性还是值得了解的,为此,我们特别制作了一个免费的内容系列。当然,Swift 3.1和Swift 3在源代码级别是兼容的,因此,如果你的项目已经更新到了Swift 3,这次更新应该不会给你带来太多麻烦。但是,Xcode 8.3去掉了对Swift 2.3的支持,所以,如果你还停留在更早版本的Swift上,就还是谨慎更新的为好。
接下来,我们就简单介绍下这个系列里的内容。
SE-0080 数值类型的failable initialize
这是SE-0080带来的改进。例如,之前,当我们把一个Double
强制转换成Int
的时候,Swift会自动取消小数点后的部分。当我们需要在不同的数字类型之间执行“无损”的精度转换时,这个功能就非常有用,当转型会导致精度丢失的时候,init(exactly:)
方法会给我们返回nil
。我们通过一个最常见的场景:解析服务器返回的JSON,向大家展示了这个功能的具体用法。
SE-0045 Sequence中新添加的两个筛选元素的方法
prefix(while:)
和drop(while:)
是Swift 3.1中新加入到Sequence
类型的两个API方法,通过它们,可以帮助我们更有效的编写在Sequence
中筛选元素的方法。特别是,如果我们要在一个无限序列中筛选元素,它们就显得更方便了。
SE-0103 临时转换成escaping的closure
就像SE-0103中描述的一样,在Swift 3里,函数的closure类型参数默认从escaping变成了non-escaping。这很好理解,因为大多数用于函数式编程的closure参数的确都以non-escaping的方式工作。
但这份提议也提到了一个问题,就是有时候,我们需要把non-escaping属性的closure,传递给需要escaping属性closure的函数。什么时候需要这种场景呢?也许你在其他地方看到的解释是:这是一个不太常见的用法。
SE-0141 通过available约束Swift版本
虽 然之前我们可以通过#if这样的形式达到版本控制的目的,但如果我们用这样的方式编写程序库,就会有一个不太方便的地方。编译器要为它支持的每一个 Swift版本都独立编译一遍。于是,如果在一个Swift ABI累积性更新之间兼容了多个Swift版本,那么携带这段时间编写的程序库就是一个比较笨重的事情。一个更好的办法,当然应该是只编译一次,然后在生 成的程序库包含每个API可以支持的Swift版本。
为此Swift 3.1中,对@available
进行了扩展,我们不仅可以用它来约束操作系统,还可以指定Swift的版本。
SR-1009 使用具象类型约束泛型参数
在Swift 3.0中,如果我们要为某个特定类型的Optional
添加extension
,不是一件太容易的事情。我们得通过用protocol
约束一个类型相同的computed property来模拟某个具象类型的约束。但在Swift 3.1里,这个缺陷被弥补了,我们不仅可以对泛型参数使用protocol
进行约束,还可以使用具象类型作为类型约束,这有点儿像C++泛型中的模板偏特化技术。
SR-1446 关于内嵌类型的两种改进
这一部分,我们来聊聊和内嵌类型有关的话题。在Swift 3.1里,内嵌类型有了两方面的改进:
普通类型的内嵌类型可以直接使用其外围类型的泛型参数,此时它仍旧是一个普通类型;
泛型类型的内嵌类型可以拥有和其外围类型完全不同的泛型参数;
点击“阅读原文”,可以查看泊学中相应的免费视频教程。如果你想订阅泊学的服务,使用这个链接可以多获得 30% 会员时长: http://t.cn/R6GtgJS 。
Swift 3.1 的一些新特性的更多相关文章
- Swift 3到5.1新特性整理
本文转载自:https://hicc.me/whats-new-in-swift-3-to-5-1/,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有. Hipo 2.0 重写从 Swif ...
- iOS开发——新特性OC篇&Swift 2.0新特性
Swift 2.0新特性 转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度 ...
- Swift 2.0初探:值得注意的新特性
转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度的WWDC大会如期而至,在大会上A ...
- Atitit.swift 的新特性 以及与java的对比 改进方向attilax 总结
Atitit.swift 的新特性 以及与java的对比 改进方向attilax 总结 1. defer关键字1 2. try!形式存在的“不失败”机制3 3. Guard 4 4. swift的新语 ...
- Swift 3 新特性和迁移详解
写在前面 Swift 3.0 正式版发布了差不多快一个月了,断断续续的把手上和 Swift 相关的迁移到了Swift 3.0.所以写点小总结. 背景 代码量(4万行) 首先,我是今年年初才开始入手 S ...
- Swift 3 新特性
原文:What's New in Swift 3? ,作者:Ben Morrow,译者:kmyhy Swift 3将于今年下半年推出,为Swift开发者们带来了很多核心代码的改变.如果你没有关注过 S ...
- iOS - Swift Swift 语言新特性
1.Swift 2.0 带来哪些新变化 常规变化: 1.OS X 10.11.iOS 9 和 watchOS 2 SDK 采纳了一些 Objective-C 的特性用来提高 Swift 的编程体验, ...
- iOS开发——新特性篇&swift新特性(__nullable和__nonnull)
swift新特性(__nullable和__nonnull) 最近在看老师写代码的时候经常遇到两个陌生的关键字,但是当我在我的电脑上敲得时候就是敲不出,后来才知道这是为了swift与OC混编的时候产生 ...
- iOS开发——新特性Swift篇&Swift 2.0 异常处理
Swift 2.0 异常处理 WWDC 2015 宣布了新的 Swift 2.0. 这次重大更新给 Swift 提供了新的异常处理方法.这篇文章会主要围绕这个方面进行讨论. 如何建造异常类型? 在 i ...
随机推荐
- [Android 新特性] Android 4.3 Top 5新功能
直播会上,Android 4.3不像Nexus 7那么Sexy,也没有Chromecast电视棒那样惹人注目,但它有许多强悍的新特点,下面来看看Top 5. 1. 权限配置 支持在一台终端设备上有多个 ...
- mvn sonar:sonar在jenkins步骤的执行位置影响执行结果
1.如图所示,sonar执行可以在build中执行,也可以在步骤Post Steps中执行(mvn sonar:sonar) 2.但是在步骤Post Steps中执行的话,有一个问题,就是假如项目有多 ...
- 附1 consul常用命令+常用选项
之后每用到一个command或options,都会记录在这里. 常用命令command: agent 作用:运行一个consul agent join 作用:将agent加入到consul clust ...
- mongodb聚合管道用法
基本用法 db.collection.aggregate( [ { <stage> }, ... ] ) stage如下 名称 描述 $addFields 将新的字段添加到文档中,输出的文 ...
- Javascript屏蔽鼠标右键-超简单,不过还是记录一下
Javascript屏蔽鼠标右键,其实作用也不大,也许是为了防止别人查看源代码,其实想查看源代码有多种途径,未必需要通过鼠标右键.不过当我们自定义鼠标右键弹出菜单时,也许需要这些. 下面是源码: 1 ...
- MapReduce 编程模型概述
MapReduce 编程模型给出了其分布式编程方法,共分 5 个步骤:1) 迭代(iteration).遍历输入数据, 并将之解析成 key/value 对.2) 将输入 key/value 对映射( ...
- Thinkphp学习笔记-编辑工具Sublime license
选择[help]-[enter license] 直接输入注册码就可以了 ----- BEGIN LICENSE ----- Andrew Weber Single User License EA ...
- UIWebView页面的控制(二)
1.UIWebView的内容控制的属性/方法列表 loading属性 确认当前页面是否在读入中 canGoForward属性 确认goForward 方法是否可运行, ...
- html5图像、图片处理【转】
本文主题 情人节在网上看到国外JS牛人利用HTML5技术实现的一朵玫瑰花,深切的感受到HTML5技术的强大.本着学习的态度看了一下那朵玫瑰花的源代码,其中用到的HTML5技术是canvas标签,于是灵 ...
- com.fasterxml.jackson.core.JsonParseException: Unexpected character
com.fasterxml.jackson.core.JsonParseException: Unexpected )): was expecting double-quote to start fi ...