文章来源FishYan的博客 转载请注明出处。

Swift 3.1 于3月27发布更新,是一个小版本更新,其中主要包含对标准库的改进,Swift对Linux的更新,和Swift软件包管理器的更新。

语言更新

Swift 3.1 属于小版本更新,兼容 Swift 3.0 版本,但是 Xcode 8.3 已经不再支持 Swift 2.3 。

它主要包含以下更新,主要是对 Swift Evolution Process 的更新

新增Sequence协议成员

该Sequence协议现在有两个新成员:

protocol Sequence {// .../// Returns a subsequence by skipping elements while `predicate` returns/// `true` and returning the remainder.func drop(while predicate: (Self.Iterator.Element) throws -> Bool) rethrows -> Self.SubSequence/// Returns a subsequence containing the initial elements until `predicate`/// returns `false` and skipping the remainder.func prefix(while predicate: (Self.Iterator.Element) throws -> Bool) rethrows -> Self.SubSequence
}

这两个函数的意思正好相反,

prefix(while:) 返回满足某 predicate 的最长子序列。从序列的开头开始,并且在第一个从给定闭包中返回 false 的元素处停下。

drop(while:) 做相反的操作:从第一个在闭包中返回 false 的元素开始,直到序列的结束,返回此子序列。

举例:

let array = [1,5,3,7,4,6,5,8,9,10]let interval = array.prefix(while: {$0 < 6})print(interval) // [1, 5, 3] 遇到 7 > 6 return false 时停止let interval1 = array.drop(while:  {$0 < 6})print(interval1) // [7, 4, 6, 5, 8, 9, 10] 遇到 7 > 6 return false 时开始

请参见:SE-0045:Add prefix(while:) and drop(while:) to the stdlib

Swift3.1扩展了@availability

Swift 3.1将@availability属性扩展为使用Swift版本来指示声明的使用范围。例如,在Swift 3.1中删除的API将被写为:


@available(swift, obsoleted: 3.1)
class Foo {//...
}

查看更多:SE-0141:Availability by Swift version

改进的数字转换初始化器

Swift 3.1 为所有的数字类型 (Int, Int8, Int16, Int32, Int64, UInt, UInt8, UInt16, UInt32, UInt64, Float, Float80, Double) 实现了可失败初始化方法,要么完全成功、不损失精度,要么返回 nil ;

举个例子:

let a: Double = 2.22let b = Int(exactly: a) // nil, Swift 3.1 新增let c = Int(a) // 2

请参见:SE-0080:Failable Numeric Conversion Initializers

废弃和替换UnsafeMutablePointer.initialize(from :)

将采用 Collection 的 UnsafeMutablePointer.initialize(from:) 替换为采用 Sequence 的 UnsafeMutableRawBufferPointer.initialize(as:from:) 以提高内存安全性和实现更快的存储速度

查看更多在:SE-0147:Move UnsafeMutablePointer.initialize(from:) to UnsafeMutableBufferPointer

改进Linux实现

  • 实现 NSDecimal
  • 实现 NSLengthFormatter
  • 实现 Progress
  • 对URLSession的功能进行较多的改进,包括 API 和 优化 libdispatch 的使用。
  • 改进API包含NSArray,NSAttributedString等
  • 显着提高 Data 性能。查看更多细节
  • 改进 JSON 序列化性能
  • 固定内存泄漏 NSUUID,NSURLComponents 等
  • 改进的单元测试,尤其是 URLSession

软件包管理器更新

可编辑包

默认情况下,软件包依赖文件是放在工具管理的目录中,新的swift package edit命令允许用户在软件包上进行编辑,并让用户控制(在Packages目录),免除依赖关系更新,并允许用户提交并将更改推送到该包。

查看更多信息:SE-0082: Package Manager Editable Packages

版本锁定

您使用的每一个依赖包的版本都会记录在Package.pins文件中,可以签入,以便与其他用户共享这个版本的依赖包; 可以通过 swift package pin和swift package unpin 进行控制。在解析依赖关系时,默认情况下取消包的依赖关系的固定版本,但 swift package update 会为你的项目添加最新的依赖包。

请参见:SE-0145:Package Manager Version Pinning

工具版本

软件包现在可以指定所需Swift工具的最低版本。该要求可以用swift package tools-version命令编辑,并记录在 Package.swift 的顶部。相对于那些将要被忽略的依赖,软件包版本需要新的 Swift 工具,因此软件包可以采用新的Swift功能,而不会破坏正在使用旧版Swift工具的客户端。所需的最低工具版本决定了哪些Swift语言版本用于编译 Package.swift ,以及哪个版本的 PackageDescription API可用。

查看更多信息:SE-0152:Package Manager Tools Version

Swift语言兼容版本

软件包现在可以指定它们的来源是以Swift 3或Swift 4语言版本编写的。如果未指定,则从软件包的最小Swift工具版本推断出默认值。

查看更多信息:SE-0151:Package Manager Swift Language Compatibility Version

其他包管理器改进

  • 修正了以前版本所存在的一些问题。在构建过程中检测依赖关系周期,并且尽可能少的修改源文件。

  • swift test现在支持–parallel标签并行运行测试。swift build,swift test和swift package命令现在支持–enable-prefetching标签并行地获取这些依赖关系。

可以在文档库中找到Swift Package Manager。

迁移到Swift 3.1

Swift 3.1与Swift 3.0兼容。为了帮助从Swift的早期版本迁移到Swift 3.1,Xcode 8.3包含一个代码迁移器,可以自动处理大多需要修改的源代码。还有一个迁移指南来指导您完成其他的修改。

Swift 3.1 更新了什么相关推荐

  1. OC和swift混合工程更新库时报:target has transitive dependencies that include statically linked binaries

    OC和swift混合工程更新库时报:target has transitive dependencies that include statically linked binaries.有时间报的错误 ...

  2. swift 1.0更新为2.0后的变化

    很久没看swift.以前写的代码出现了很多问题.抛弃之. println已经变成了print了. 字符串的长度从以前的count(str) 变成现在的str7.characters.count了. 字 ...

  3. swift文件服务器,Swift3一行代码将各种类型文件上传到服务器

    由于之前一直在忙项目,很久没有写过一篇像样的文章了,现在手上的项目基本是完成了,正好工作时间偷个懒写两篇文章. 将相机或相册图片上传到服务器 先看看最常见的图片上传,也可以选择跳过,后面有直接的封装方 ...

  4. Swift 3.0 预告:将 Objc 库转换成更符合 Swift 语法风格的形式

    转自:swiftcafe Swift 3.0 更新越来越临近,这次更新会给我们带来很多实用的内容,比如对 Objc 库的迁移,会更符合 Swift 的语法风格.用过之前版本的 Swift,我们会发现很 ...

  5. 如何使用Swift获取App版本和内部版本号?

    本文翻译自:How do I get the App version and build number using Swift? I have an IOS app with an Azure bac ...

  6. Swift 3.0 beta 6权限访问修改

    原文地址: https://kemchenj.github.io/20... title: Swift 3.0 beta 6权限访问修改 date: 2016-08-17 17:14 前两天 swif ...

  7. 如何使用Instruments诊断App(Swift版):起步

    2019独角兽企业重金招聘Python工程师标准>>> 本文由Mr_cyz(博客)翻译自raywenderlich,欢迎参与我们的翻译活动. 原文:Instruments Tutor ...

  8. Swift语言入门学习

    文档 在入门Swift语言之前,可以先看下苹果官方对Swift语言的介绍(中文版) Swift介绍 开始着手学习Swift,可以看Swift官方文档.这篇文档是Swift Language Guide ...

  9. 游戏中的三角学——Sprite Kit 和 Swift 教程(1)

    原文链接 : Trigonometry for Games – Sprite Kit and Swift Tutorial: Part 1/2 原文作者 : Nick Lockwood 译文出自 : ...

最新文章

  1. java excel上传--poi
  2. nrf connect 安卓_永诺YN450安卓系统无反相机
  3. 当 Flutter 遇见 Web,会有怎样的秘密?
  4. Docker技术快速精通指南
  5. DPDK无锁队列rte_ring相关代码及示例程序(rte_ring.h,rte_ring.c,main.c,makefile)
  6. [Ext JS]12.12.1 必填字段组件扩展
  7. 在jquery中想要找到所以同辈元素方法_在jquery中siblings找到所有元素的同辈元素,是什么意思,有人可以给我详细讲解一下不?...
  8. avs php,linux 安装AdultVideoScript (AVS)全教程
  9. MATLAB求函数零点—fzero函数
  10. 移植waland/weston 到AM335X 在运行的时候运行不成功分析
  11. 爬取网易云数据并且可视化展示
  12. 基于SSM的疫情数据可视化、录入统计系统
  13. ASC制动效果成因个人理解
  14. 为你的个人博客添加访客地图
  15. CSS盒模型(详解)
  16. 双路由器设置经验:无线路由器接房东的网线,房东给予IP和DNS
  17. 亚马逊、eBay、速卖通、lazada、Shopee等跨境平台,如何快速打造爆款
  18. 〖产品思维训练白宝书 - 核心竞争力篇⑥〗- 产品经理核心竞争力解读之执行力
  19. 智慧水务、水利、环保可视化大屏设计(Axure高保真原型)
  20. matlab fts2mat,[原创]基于MATLAB的通达信股价数据的复权处理(fantuanxiaot版本)

热门文章

  1. epsfallback_5G语音回落4G解决方案探讨
  2. 函数的节流(throttle)
  3. python的文件读写方法有哪些_python读写文件的方法有哪些
  4. History 和 Hash 路由模式
  5. 转载:chatbot聊天机器人技术路线
  6. python处理输入无效数据异常_python异常的处理
  7. 创意文案的撰写是炮制金句的过程
  8. Armadillo | 复数小记
  9. 掌握spark 3.0中的查询计划
  10. 学生成绩平均绩点计算:绩点计算器(5.0分制,Java、C实现)