Swift最新的主要版本提供了针对语言本身以及标准库的大量改动和更新,最重要的变化包括新增的String功能、扩展集合、归档和序列化等。

Swift 4中,String已全面遵循Collection协议,因此可直接迭代并提供了集合与序列类似的全部条件,例如:

for c in myString {

print(c)

}

myString.filter { c in

return boolCheck(c)

}

let l = myString.count

let myString2 = myString.dropFirst()

此外String切片现已成为下标(Substring)类型的实例,遵循StringProtocol,可按照与String类型完全一致的方式使用。这一改动有助于改善切片性能,因为Substring已经不再需要复制String切片。复制操作可延迟至Substring转换为String并被某些API使用的时候进行。

String的其他功能还包括:支持Unicode 9以及多行Literal。

Swift 4还改进了用户创建、使用和管理集合类型的方式,例如Dictionary和Set。

首先,用户现在已经可以通过元祖(Tuple)序列创建字典,并指定如果遇到重复内容后的处理方式,而这一操作可在创建字典或合并两个字典的过程中进行:

let items = ["ItemA", "ItemB", "ItemC", "ItemA"]

let prices = [14.40, 41.63, 3.71, 15.63]

let catalog1 = Dictionary(uniqueKeysWithValues: zip(items, prices))

let catalog2 = Dictionary(prices, uniquingKeysWith: { (l, r) in

l })

let catalog3 = Dictionary(prices, uniquingKeysWith: { (l, r) in

l + r })

let merged = catalog.merge(catalog3) { (l, r) in r }

Dictionary和Set现在可以筛选成为原始类型的另一个对象,而不再筛选为Array。此外字典也已经可以支持新的mapValues方法:

let catalog4 = catalog.filter { $0.value < 15.0 }

let catalog5 = catalog.mapValues { $0 * 1.2 }

关于字典还有一个实用的改进:在访问其元素时可以指定默认值,这样便可让下标运算符返回Non-opt类型:

let price1 : Float = catalog['none', default: 0.0]

let price2 : Float? = catalog['none']

Swift 4中所有Collection类型均支持泛型下标(Generic subscript)。这意味着我们可以定义下列JSON结构,不将索引的结果抛给字典:

struct JSON {

init(dictionary: [String:Any]) {

...

}

subscript(key: String) -> T? {

...

}

}

let json = ...

let result: String? = json['item']

对于该语言还有一个广受好评的改进:对归档和序列化的支持,以前这需要通过NSObject和NSCoding处理,无法用于struct和enum类型。但Swift 4通过Codable协议增加了对所有类型的序列化支持。Ole Begemann对Swift 4的编码和解码提供了入门简介。例如我们可以这样定义一个Codable类型:

struct Card: Codable, Equatable {

enum Suit: String, Codable {

case clubs, spades, hearts, diamonds

}

enum Rank: Int, Codable {

case two = 2, three, four, five, six, seven, eight, nine, ten, jack, queen, king, ace

}

var suit: Suit

var rank: Rank

static func ==(lhs: Card, rhs: Card) -> Bool {

return lhs.suit == rhs.suit && lhs.rank == rhs.rank

}

}

let hand = [Card(suit: .clubs, rank: .ace), Card(suit: .hearts, rank: .queen)]

最后,Swift 4提供了两种语言模式,可通过-swift-version编译器选项进行选择。在Swift 3.2模式中,编译器可接受大部分使用Swift 3.x编译器编译的源代码。在该模式下,大部分Swift 4语言功能均可用,但针对之前已有API的各种更新均不可用。在Swift 4.0模式中,我们可以使用Swift 4的全部功能,但可能需要改动部分源代码,这一过程通常可通过Xcode的迁移助理实现。

Swift 4还有很多改进,建议阅读Swift维护者Ted Kremenek的公告,并通过Ole Begemann在交互式Playground中提供的所有新功能演示来体验。

Swift 4已包含在Xcode 9中,并可手工安装到Xcode 8.3中使用。

swift4 linux,Swift 4正式发布,新功能概览相关推荐

  1. kail linux稳定版本,Kali Linux 2020.3 稳定版已发布 更新后新功能概览

    Kali Linux 2020.3稳定版已发布,新版带来了许多令人印象深刻的更新,例如引入 zsh,并宣布从 bash 切换至 zsh 的计划(目前仍然默认使用 bash,2020.4 将默认使用 z ...

  2. linux mate主题目录,Linux Mint 19.1新功能介绍,包含Cinnamon、Xfce、MATE桌面

    Linux Mint 19.1(开发代号Tessa)是一个LTS长期支持版本,基于Ubuntu 18.04,采用Linux kernel 4.15内核,它附带了很多更新的软件,并带来了改进和许多新功能 ...

  3. Windows Server 2008 R2之新功能概览

    1.仅支持64位 R2 只能安装在64位硬件,不能在32位上.它支持多达256个核心. 2.AD管理中心 它取代了AD.域和信任.站点和服务,以及用户和计算机管理工具.它是建立在PowerSell之上 ...

  4. Win11正式发布新功能

    2014年,微软发布了win10系统,后来微软号称win10将是最后一版系统,以后不会再有win11什么的玩意儿,但是,今年微软还是发布了win11. 科技界的大佬说话,永远不要相信,小米还说自己不会 ...

  5. red flag linux是应用软件吗,RedFlag Desktop Linux 10(红旗Linux 10)的新功能/特性介绍...

    本文将向你介绍RedFlag Desktop Linux 10(红旗Linux 10)的新功能及新特性,让你对RedFlag的桌面版创新有一个了解,以下介绍6点和其他Linux发行版有着与众不同的地方 ...

  6. Swift 4正式发布,新功能概览

    Swift最新的主要版本提供了针对语言本身以及标准库的大量改动和更新,最重要的变化包括新增的String功能.扩展集合.归档和序列化等. \\ Swift 4中,String已全面遵循Collecti ...

  7. 针对边缘计算,红帽企业Linux 9有哪些新功能?

    每一次发布红帽企业Linux(RHEL)都激动人心,每一个(大的)新版本为业界提供十年以上的技术底座.RHEL 9标志着下一个里程碑,在稳定性.性能.升级和安全能力等领域提供全面改进.由于边缘计算是我 ...

  8. Node 10 新功能概览(译)

    以代号"Dubnium"为代表的Node 10于2018年4月24日发布,并将于2018年10月进入长期支持(LTS).JavaScript开发人员一直在激动地等待今天,今天我们来 ...

  9. Linux Kernel 3.0新特性概览(转)

    上周五,Linus Torvalds终于发布了备受瞩目的新一代Linux操作系统内核.Linux Kernel 3.0经过了七个RC候选版才推出正式版本,上一个版本是5月19日的2.6.39,也是2. ...

最新文章

  1. 《C语言及程序设计》程序阅读——文件操作
  2. 【HDU 1711】Number Sequence(裸KMP算法)
  3. 二叉树的递归遍历与复制
  4. php 前置匹配,浅析PHP正则表达式匹配的特定实现
  5. 数的划分(信息学奥赛一本通-T1440)
  6. flask Flash消息
  7. 银行数据部门如何管理跟使用数据?来围观星球中老师的答案
  8. parallels恢复linux密码,在Parallels Desktop中忘记Windows密码怎么办 Parallels Desktop忘记Windows密码的解决方法...
  9. Linux内核源码目录
  10. 微信小程序获取用户头像昵称手机号最新版
  11. 服务器如何装linux 系统教程,教程/操作系统 手把手教你装Linux系统
  12. 高一计算机教学,高一信息技术教学计划参考
  13. 餐馆管理系统程序流程图_这个交付应用程序使您最喜欢的中国餐馆保持活力
  14. 设备、设备控制器与驱动程序
  15. HDU - 1573 X问题
  16. 大学该不该开python教学_#51CTO学院四周年# python学习感受和一些愚见
  17. 《麦田里的守望者》谁又不是以过来人的身份,来做一个麦田里的守望者呢?
  18. pwm调速流程图小车_51单片机智能小车《pwm调速按键控制小车动作》
  19. C语言 数字实现字母表 链表实现字母表
  20. redis集群模式登陆

热门文章

  1. python 三种聚类算法(K-means,AGNES,DBScan)
  2. python emoji 表情处理过滤
  3. python 比较list差异
  4. openvino人脸
  5. torch.topk
  6. c++中关于char数组/char*指针/string类型
  7. python提取图像的每一帧
  8. C代码生成图片:BMP、PNG和JPEG
  9. 使用OpenCV进行标定(Python)
  10. Tensorflow学习: 乘法demo