写点什么

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

  • 2017-09-24
  • 本文字数:1943 字

    阅读完需:约 6 分钟

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 }

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

复制代码
let catalog4 = catalog.filter { $0.value
<p> 关于字典还有一个实用的改进:在访问其元素时可以指定默认值,这样便可让下标运算符返回 Non-opt 类型: </p>
let price1 : Float = catalog['none', default: 0.0]
let price2 : Float? = catalog['none']
<p>Swift 4 中所有 <code>Collection</code> 类型均 <a href="https://github.com/apple/swift-evolution/blob/master/proposals/0148-generic-subscripts.md"> 支持泛型下标(Generic subscript)</a>。这意味着我们可以定义下列 <code>JSON</code> 结构,不将索引的结果抛给字典:</p>
struct JSON {
init(dictionary: [String:Any]) {
...
}
subscript<t>(key: String) -> T? {
...
}
}
let json = ...
let result: String? = json['item']
</t>
<p>
对于该语言还有一个广受好评的改进:对归档和序列化的支持,以前这需要通过 <code>NSObject</code><code>NSCoding</code> 处理,无法用于 <code>struct</code><code>enum</code> 类型。但 Swift 4 通过 <code>Codable</code> 协议 <a href="https://github.com/apple/swift-evolution/blob/master/proposals/0166-swift-archival-serialization.md"> 增加了对所有类型的序列化支持 </a>。Ole Begemann 对 Swift 4 的 <a href="https://github.com/ole/whats-new-in-swift-4/blob/master/Whats-new-in-Swift-4.playground/Pages/Encoding%20and%20decoding.xcplaygroundpage/Contents.swift"> 编码和解码 </a> 提供了入门简介。例如我们可以这样定义一个 <code>Codable</code> 类型:
</p>
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)]
<p> 最后,Swift 4 提供了两种语言模式,可通过 <code>-swift-version</code> 编译器选项进行选择。在 Swift 3.2 模式中,编译器可接受大部分使用 Swift 3.x 编译器编译的源代码。在该模式下,大部分 Swift 4 语言功能均可用,但针对之前已有 API 的各种更新均不可用。在 Swift 4.0 模式中,我们可以使用 Swift 4 的全部功能,但可能需要改动部分源代码,这一过程通常可通过 Xcode 的迁移助理实现。
</p>
<p>Swift 4 还有很多改进,建议阅读 Swift 维护者 Ted Kremenek 的公告,并通过 Ole Begemann 在交互式 Playground 中提供的所有新功能演示来体验。 </p>
<p>Swift 4 已包含在 <a href="https://developer.apple.com/xcode/">Xcode 9</a> 中,并可手工安装到 <a href="https://swift.org/download/#snapshots">Xcode 8.3</a> 中使用。 </p>
<p><strong> 阅读英文原文 </strong><a href="https://www.infoq.com/news/2017/09/swift-4-official-release">Swift 4 is Officially Available: What's New</a></p>
2017-09-24 19:002537
用户头像

发布了 283 篇内容, 共 107.7 次阅读, 收获喜欢 62 次。

关注

评论

发布
暂无评论
发现更多内容

职场<火焰杯>测试开发大赛证书已开放下载!

测试人

软件测试

职场<火焰杯>测试开发大赛证书已开放下载!

霍格沃兹测试开发学社

是你!就是你!我们的黄金写手!

Zilliz

人工智能 大数据 Milvus Zilliz 大语言模型

如何定量分析 Llama 3,大模型系统工程师视角的 Transformer 架构

百度Geek说

大模型 Llama3

视角 | 麻省理工学院提出出温度计校准法,专治AI大模型过度自信

硅纪元

告别手动错误,NineData自动化平台保障数据库变更零失误

NineData

数据库 dba NineData 变更一致性 多环境结构

领域驱动设计:问卷schema的原理

XIAOJUSURVEY

schema 领域驱动 问卷模型 领域模型 UIschema

以太坊创始人 Vitalik Buterin 2024 年 EDCON 演讲解析:回顾十年历程,展望下一个十年

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

flowjo 10 for mac流式细胞分析 详细安装破解教程 支持m1/m2/intel

Rose

流式细胞分析软件 FlowJo 10破解版 FlowJo Mac版 FlowJo 安装教程

Magnet for mac v2.12.0中文免激活版 支持多种不同方式的窗口布局模式

Rose

Magnet破解版 Magnet Mac下载 苹果电脑分屏软件 macOS窗口管理

最高可管理 10K 实例的 InstanceSet 是什么?

小猿姐

数据库 Kubernetes 云原生

Downie 4 v4.7.24最新中文版下载 永久使用 支持M1.M2.M3芯片安装

Rose

Downie 4许可证 Mac视频下载器 Downie 4下载 Downie 4使用教程

Microsoft PowerPoint 2019 for Mac永久使用版 支持Inte.m1.m2.m3安装

Rose

PowerPoint 2019 ppt2019下载 PowerPoint 2019 破解

BetterTouchTool for mac触摸板增强神器下载 bettertouchtool破解版详细使用教程

Rose

BetterTouchTool破解 BetterTouchTool教程 Mac触控板增强工具

担心异构数据库迁移踩“坑”?听听大咖们怎么说

YashanDB

yashandb 崖山数据库 崖山DB

Riot Platforms 报告称,由于比特币挖矿量下降,损失了 8440 万美元

dappweb

ChemDraw可以绘制哪些物质?ChemDraw破解补丁版下载安装 Mac/win

Rose

ChemDraw破解版 ChemDraw化学绘图 ChemDraw下载安装

科学文献管理软件EndNote 21功能介绍 含(EndNote 21激活码)

Rose

文献管理工具 EndNote 21下载 EndNote 21破解版 EndNote 21授权码

PDF解析,还能做得更好

合合技术团队

PDF 大模型 文档解析

微软Azure遭遇DDoS攻击,全球云服务再次敲响警钟!

网络安全服务

微软 azure 云服务 DDoS DDoS 攻击

Pura 70系列AI修图大师再上新!小艺AI扩图开启魔幻新体验

Geek_2d6073

GraphPad Prism科技绘图与数据分析

Rose

GraphPad Prism破解版 科学绘图和统计分析 GraphPad Prism下载

IntelliJ IDEA 2019 mac破解版 含IDEA 2019永久密钥 附IDEA 2019中文版设置教程

Rose

IntelliJ IDEA 2019 IntelliJ IDEA 2019密钥 编程软件 IDEA 2019

品牌与分类:解析京东商品详情API中的品牌与分类信息

技术冰糖葫芦

API 安全 API 文档 API 测试 API 优先

Swift 4正式发布,新功能概览_开源_Sergio De Simone_InfoQ精选文章