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 的一些新特性的更多相关文章

  1. Swift 3到5.1新特性整理

    本文转载自:https://hicc.me/whats-new-in-swift-3-to-5-1/,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有. Hipo 2.0 重写从 Swif ...

  2. iOS开发——新特性OC篇&Swift 2.0新特性

    Swift 2.0新特性     转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度 ...

  3. Swift 2.0初探:值得注意的新特性

    转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度的WWDC大会如期而至,在大会上A ...

  4. Atitit.swift 的新特性 以及与java的对比 改进方向attilax 总结

    Atitit.swift 的新特性 以及与java的对比 改进方向attilax 总结 1. defer关键字1 2. try!形式存在的“不失败”机制3 3. Guard 4 4. swift的新语 ...

  5. Swift 3 新特性和迁移详解

    写在前面 Swift 3.0 正式版发布了差不多快一个月了,断断续续的把手上和 Swift 相关的迁移到了Swift 3.0.所以写点小总结. 背景 代码量(4万行) 首先,我是今年年初才开始入手 S ...

  6. Swift 3 新特性

    原文:What's New in Swift 3? ,作者:Ben Morrow,译者:kmyhy Swift 3将于今年下半年推出,为Swift开发者们带来了很多核心代码的改变.如果你没有关注过 S ...

  7. iOS - Swift Swift 语言新特性

    1.Swift 2.0 带来哪些新变化 常规变化: 1.OS X 10.11.iOS 9 和 watchOS 2 SDK 采纳了一些 Objective-C 的特性用来提高 Swift 的编程体验, ...

  8. iOS开发——新特性篇&swift新特性(__nullable和__nonnull)

    swift新特性(__nullable和__nonnull) 最近在看老师写代码的时候经常遇到两个陌生的关键字,但是当我在我的电脑上敲得时候就是敲不出,后来才知道这是为了swift与OC混编的时候产生 ...

  9. iOS开发——新特性Swift篇&Swift 2.0 异常处理

    Swift 2.0 异常处理 WWDC 2015 宣布了新的 Swift 2.0. 这次重大更新给 Swift 提供了新的异常处理方法.这篇文章会主要围绕这个方面进行讨论. 如何建造异常类型? 在 i ...

随机推荐

  1. [Android 新特性] Android 4.3 Top 5新功能

    直播会上,Android 4.3不像Nexus 7那么Sexy,也没有Chromecast电视棒那样惹人注目,但它有许多强悍的新特点,下面来看看Top 5. 1. 权限配置 支持在一台终端设备上有多个 ...

  2. mvn sonar:sonar在jenkins步骤的执行位置影响执行结果

    1.如图所示,sonar执行可以在build中执行,也可以在步骤Post Steps中执行(mvn sonar:sonar) 2.但是在步骤Post Steps中执行的话,有一个问题,就是假如项目有多 ...

  3. 附1 consul常用命令+常用选项

    之后每用到一个command或options,都会记录在这里. 常用命令command: agent 作用:运行一个consul agent join 作用:将agent加入到consul clust ...

  4. mongodb聚合管道用法

    基本用法 db.collection.aggregate( [ { <stage> }, ... ] ) stage如下 名称 描述 $addFields 将新的字段添加到文档中,输出的文 ...

  5. Javascript屏蔽鼠标右键-超简单,不过还是记录一下

    Javascript屏蔽鼠标右键,其实作用也不大,也许是为了防止别人查看源代码,其实想查看源代码有多种途径,未必需要通过鼠标右键.不过当我们自定义鼠标右键弹出菜单时,也许需要这些. 下面是源码: 1 ...

  6. MapReduce 编程模型概述

    MapReduce 编程模型给出了其分布式编程方法,共分 5 个步骤:1) 迭代(iteration).遍历输入数据, 并将之解析成 key/value 对.2) 将输入 key/value 对映射( ...

  7. Thinkphp学习笔记-编辑工具Sublime license

    选择[help]-[enter license]   直接输入注册码就可以了 ----- BEGIN LICENSE ----- Andrew Weber Single User License EA ...

  8. UIWebView页面的控制(二)

    1.UIWebView的内容控制的属性/方法列表 loading属性               确认当前页面是否在读入中 canGoForward属性   确认goForward  方法是否可运行, ...

  9. html5图像、图片处理【转】

    本文主题 情人节在网上看到国外JS牛人利用HTML5技术实现的一朵玫瑰花,深切的感受到HTML5技术的强大.本着学习的态度看了一下那朵玫瑰花的源代码,其中用到的HTML5技术是canvas标签,于是灵 ...

  10. com.fasterxml.jackson.core.JsonParseException: Unexpected character

    com.fasterxml.jackson.core.JsonParseException: Unexpected )): was expecting double-quote to start fi ...