对Swift 3有何期待

您可能知道Swift 3将于今年晚些时候问世。 这是包含梦幻般社区的辛勤工作的第一个版本。 自2015年Apple开源Swift以来,已经提交了数十个提案,经过核心团队的仔细考虑,数十个提案被接受。 在本文中,我们将介绍Swift 3中的一些重要更改。

Swift 3是关于什么的?

随着Swift 3的发布,核心团队的目标非常明确,为Swift编程语言奠定了坚实的基础。 在WWDC 2016上, 克里斯·拉特纳Chris Lattner)强调,Swift 3引入了一系列突破性的变化,目的是使基本原理正确。 这是即将发布的版本的共同主题。 这意味着要破坏现有功能,删除某些功能并改善语言的基础。

Swift演变项目对于参与Swift社区的每个人都是一个成功的故事。 参与度非常高,结果就是Swift3。Apple对发布过程保持透明,可以从Swift网站上获得Swift 3的快照,该快照包含在Xcode 8中,Xcode 8在撰写本文时处于beta版。

不只是Swift

Swift 3版本不仅专注于Swift编程语言,还包括对工具链, 标准库以及该语言与Cocoa的互操作性的重大更改。 请记住,Swift不仅仅是一种语言。 在谈论Swift时,通常只考虑语言,但它也包括标准库和包管理器。

源兼容性

如果您使用过Swift,那么您就会知道将代码库从一个版本迁移到另一个版本并不是一件容易的事。 不幸的是,将项目迁移到Swift 3并没有什么不同。

也就是说,Swift 3的主要目标是确保从Swift 3到该语言的未来版本的过渡不会像那样。 源代码兼容性是Swift 3的重点。

很棒

Swift被设计为一种现代编程语言,但是创建看起来不错并且很好……很棒的语言同样重要。 像Chris Lattner所说的那样,借助Swift 3,团队继续“优化语言以达到令人敬畏的目的”。

尽管发生了许多重大变化,但最终的结果是一种感觉良好的语言。 Swift 3使用起来很有趣。 我们稍后讨论的对Core Graphics和Grand Central Dispatch的更改就是很好的例子。

发生了什么变化?

Swift真棒,Swift 3真棒。 在本文的其余部分中,我将重点介绍Swift 3中引入的一些关键更改。请记住,Swift 3会继续发展,直到今年晚些时候正式发布为止。

API

可读性

大量时间和精力花费在改进Swift语言的API上。 变化是重大的,无可否认。 但是结果非常非常好。 借助Swift 3,核心团队的目标是开发一个注重可读性和可访问性的API。

尽管我们许多人已经习惯了Objective-C的冗长性,但新的Swift API仅通过强调和关注基本要素而采用了不同的方法。 看一下下面的Swift 2.2.1示例。 如果您花了一些时间使用Swift ...或Objective-C,则此示例应该看起来很熟悉。

parentViewController.presentViewController(newViewController, animated: true, completion: nil)

在Swift 3中,此代码段看起来略有不同,如下所示。

parentViewController.present(newViewController, animated: true, completion: nil)

Swift社区意识到,由于该信息已经包含在第一个参数中,因此无需引用将要呈现的内容。 结果,方法名称变得更加可读和简洁。 如果你问我的话,肯定有进步。

这是Swift 3中的一个通用主题。Swift 3中接受并包含的一些建议集中在简化和消除语言的混乱之处上。 Swift API最初受到Objective-C冗长性质的严重影响。 可读性很好,但是Swift 3减少了冗长性,同时又不影响可读性。

Swift社区认为,API的设计应始终考虑到API的使用,并且在Swift 3中引入的更改中可以清楚地看出这一点。我确信您同意经过修改的API看起来很明显,并且读-很棒。

标签参数

许多开发人员欢迎的另一个重要更改是功能和方法的一致签名,默认情况下通过包含第一个参数标签来实现。 这就是Swift 2.2.1中的典型函数。 默认情况下,调用该函数时将省略第一个参数标签。

func setupView(view: UIView, withConfiguration configuration: Configuration) {
    // ...
}

setupView(view, withConfiguration: configuration)

在Swift 3中不再是这样。第一个参数不再经过特殊处理,这是一个非常受欢迎的更改。

func setupView(view: UIView, withConfiguration configuration: Configuration) {
    // ...
}

setupView(view: view, withConfiguration: configuration)

由于此更改,您可以通过在函数名称中省略对视图的引用来进一步改进上述示例。

func setup(view: UIView, withConfiguration configuration: Configuration) {
    // ...
}

setup(view: view, withConfiguration: configuration)
导入为会员

在Swift中使用C API看起来总是很笨拙。 例如,Core Graphics函数作为全局函数导入,这不是一个很好的解决方案,因此,在Swift中使用Core Graphics感觉并不好。

大中央调度也是如此。 在下一个示例中,我们使用Grand Central Dispatch将任务异步分配到后台队列。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)) { 
    // ...
}

在Swift 3中,该API感觉更像是本机Swift API。 函数作为方法导入,这在Swift 3中产生以下语法。

DispatchQueue.global(attributes: .qosBackground).async { 
    // ...
}

删除功能

Swift社区还同意删除许多功能,其中一些引发了激烈的讨论。 我想指出其中的四个。

C风格for循环

这看起来对您熟悉吗?

for (var i = 0; i < 5; i++) {
    print(i)
}

Swift 3中不再提供C样式for循环。请稍候。 什么? 为什么? 这是一个很好的问题。 您可以在GitHub上阅读Erica Sadun提交的提案 。 这将我们带入下一个有争议的变化。

++说再见--

Swift开源后不久,Swift的创建者Chris Lattner 提交了一项提案 ,要求从该语言中删除递增和递减运算符。 在他的建议中,他提到在Swift的早期开发中,“无需过多考虑”就添加了这些运算符。 为了清理Swift API并避免混淆, ++--在Swift中不再可用。

var a = 0
a++

不过不要惊慌。 解决方案很简单。 不用担心。

var a = 0
a += 1
没有更多的var参数

如果您熟悉Swift中的函数,则知道函数的参数默认情况下是常量。 您可以通过在参数名称前添加var关键字来更改此行为。 对于可变参数,参数的可变副本将传递给函数。

但这与标记为inout参数有何不同? 对。 这正是我们许多人一直想知道的,这是从语言中删除可变参数的动机。

从函数的角度来看,没有什么区别,即函数接收参数值的可变本地副本。 但是,顾名思义,标记为inout的参数会将其值写回到原始变量。

为避免混淆,在Swift 3中var参数不再可用。幸运的是,这里保留inout参数。

说到inout参数,在Swift 3中, inout关键字集成在函数参数的类型语法中。 请看以下示例,以更好地理解此更改。

// Swift 2
func combineStrings(inout first: String, second: String) {
    // ...
}

// Swift 3
func combineStrings( first: inout String, second: String) {
    // ...
}
隐式元组Splat行为

尽管Swift仍然很年轻,但是许多功能还是相当先进的。 您是否知道可以将元组传递给函数而不是参数列表? 不过,没有必要加油。 此功能将在Swift 3中删除。

// Pass Arguments As Separate Arguments

let view = UIView()
let configuration = Configuration()

setupView(view, withConfiguration: configuration)

// Pass Arguments As Part of Tuple

let tuple = (view, withConfiguration: configuration)

setupView(tuple)

克里斯·拉特纳(Chris Lattner)在删除功能的建议中将此行为称为“可爱”。 尽管此行为有时会有用,但似乎会产生很多后果。 提出此建议的原因是为了突出核心团队的主要目标,简化语言的语法和API。

我可以看到该功能最初看起来很整洁,但是随着语言的发展,复杂性的增加以及越来越多的人开始使用它,诸如此类的功能为语言增加了有限的价值,以换取似乎是一连串的复杂性,包括编译期间的性能问题以及类型检查器的复杂性,可以通过省略功能来避免。

Swift 2.3有什么用?

上周,我写了有关Xcode 8的文章 。 在那篇文章中,我提到Xcode 8同时支持Swift 2.3和Swift3。但是,Swift 2.3是什么?与Swift 2.2相比又有什么不同?

Swift 2.3是对Swift的次要但重要的更新。 Swift 2.2.1(包含在Xcode 7.3.1中的版本)的主要区别在于与Apple新操作系统,iOS 10,tvOS 10,watchOS 3和macOS Sierra(10.12)的SDK兼容。

这意味着您无需跳到Swift 3就可以使用和构建新的SDK。借助Xcode 8,您可以使用Swift 2.3或Swift 3将应用程序提交到AppStore。Swift团队知道并了解向Swift的迁移。 3对包括Swift的现有项目有重大影响。 Swift 2.3确保您可以在合适时迁移项目。

工具类

我也喜欢Swift项目,因为这些工具是与语言一起开发的。 这意味着,当Swift 3于今年晚些时候发布时,这些工具也得到了实质性的更新。

文献资料

在WWDC期间,我们已经看到了对文档所做的更改。 尽管这看似微不足道,但您是否考虑过花多少时间浏览文档? 我对此类详细信息情有独钟,并感谢团队为使文档更易于访问而付出的努力。 正如我上周写的那样,这些变化在Xcode 8中更加明显。

Xcode

目前,绝大多数Swift开发人员都将Xcode用作他们的主力。 随着语言在其他平台上越来越受欢迎,这种情况将来可能会改变。 Google是否没有计划在Android上使用Swift

在Xcode 8中,Swift的集成得到了很大的改进。 例如,浏览标准库更加直观。 在WWDC 2016 的会议之一中,Ewa Matejska说明了现在如何使综合界面更加直观和易于理解。 这样一来,浏览标准库就不再那么困难了。

这使我们可以进行编译和优化。 您可能听说过整个模块的优化。 现在默认情况下在Xcode中启用了此功能。 它会影响应用程序的性能,Apple建议在生产中启用此功能。 如果您想了解有关整个模块优化的更多信息,建议阅读Keith Harrison的这篇文章

虽然整个模块的优化会在您首次构建项目时增加编译时间,但结果是值得的。 借助增量编译,后续构建的影响较小。

结论

对于参与Swift社区的每个人,Swift 3都是一个重要的里程碑。 即使没有人喜欢破坏更改,该语言的发展方向也越来越清晰,使得该平台更加强大,可以为将来的更改做准备,而不会影响源代码的兼容性。

在本文中,我重点介绍了一些在Swift 3中可以预期的更重要的更改。有关更改的完整列表,我建议您访问Swift网站上的迁移指南

您还可以访问GitHub上Swift演化项目,以了解有关已被接受的提案和仍在研究中的提案的更多信息。 别害怕 这些建议通常很容易理解。 实际上,Swift进化项目的目标是使每个人都能加入讨论。 什么阻止了你?

翻译自: https://code.tutsplus.com/articles/what-to-expect-from-swift-3--cms-26818

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值