写点什么

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:002998
用户头像

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

关注

评论

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

如何构建高效的 CRUD 应用程序?

NocoBase

软件开发 crud crudapi

怎么用云手机进行TikTok矩阵运营

Ogcloud

云手机 海外云手机 tiktok云手机 云手机海外版 tiktok矩阵

Pushgateway:观测云中的实时数据监控解决方案

可观测技术

云原生

智能监控:超越传统阈值的监控

可观测技术

智能监控

Waves 混音插件 完美破解版 for mac/win 安装包

Rose

Waves 混音插件 Waves破解版

苹果电脑防火墙Radio Silence for mac v3.2激活版 附安装教程

Rose

苹果电脑 mac防火墙 Radio Silence下载 Radio Silence破解版

商品计划管理系统助力企业实现高效决策与资源配置

第七在线

实时洞察,精准掌控:观测云在企业监控中的核心优势

可观测技术

监控

动态之美:Motion 5特效,让视频栩栩如生 mac版

Rose

mac视频后期特效处理 Motion 5破解版 Motion中文版

简析网络安全中的伦理困境与道德守则

我再BUG界嘎嘎乱杀

黑客 网络安全 信息安全 WEB安全 网安

并发性能提升 4 倍!云帐房用 Serverless 轻松应对瞬时业务洪峰

阿里巴巴云原生

阿里云 Serverless 云原生

观测云:开放透明与知识共享的引领者

可观测技术

文档 开放生态

macOS Big Sur(macos11 正式版)v11.2.3 高速下载版

Rose

实际上手体验maven面对冲突Jar包的加载规则

京东科技开发者

AI在商品计划领域的应用

第七在线

跨越边界:京东商品详情API的全球拓展之旅

代码忍者

拼多多API接口:通过商品ID获取拼多多商品详情数据接口

tbapi

拼多多商品详情接口 拼多多API 拼多多商品数据采集

pdf reader pro mac破解版 v3.2.1.0中文激活版 好用的pdf编辑阅读器

Rose

7月新特性 | 软件开发生产线CodeArts发布多项新特性等你体验!

华为云开发者联盟

测试计划 代码检查 企业号 8 月 PK 榜 CodeArts 2024企业号8月pk

如何在 K8s 中实现 Pod 原地更新?

小猿姐

数据库 云计算 Kubernetes 云原生

京东小程序数据中心架构设计与最佳实践

京东科技开发者

云手机在海外社交媒体运营中的作用

Ogcloud

云手机 海外云手机 云手机海外版 海外社媒运营 海外社媒营销

苹果电脑装机必备防休眠工具:InsomniaX for Mac中文版

Rose

MacBook防睡眠软件 InsomniaX for Mac

课件ppt怎么做?3个在线网站轻松制作教学ppt!

职场工具箱

效率 职场 PPT 办公软件 AI生成PPT

AI入门之深度学习:基本概念篇

京东科技开发者

AE 2019中文版 after effects破解资源 mac/win

Rose

AE 2019中文版 AE 2019 mac破解版 AE2019安装包 After Effects安装教程

OmniGraffle Pro mac破解版(流程图、组织结构图、网络拓扑图、电路图等)

Rose

思维导图 流程图 OmniGraffle Pro破解 OmniGraffle Pro下载

Luminar Neo:不只是修图,更是创意的孵化器

Rose

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