介绍

今年9月,Apple正式发布了其新编程语言Swift 3的最新版本。就像去年的Swift 2一样,该版本包含许多新功能和改进,这使使用Swift进行编程变得更加出色!

从8.0版开始,Xcode便包含了Swift 3,也可以从swift.org网站下载。

1.使用Swift 3

如果您想在当前或将来的项目中使用Swift 3,Xcode提供了一个出色的迁移工具,可让您轻松地做到这一点。

对于使用Xcode 8创建的新Swift项目,将自动使用Swift 3。 首次在Xcode 8中打开Swift 1或2项目时,系统会提示您将代码转换为Swift 3或Swift 2.3代码。

选择Swift 2.3将使您可以访问所有新的iOS 10,macOS Sierra,tvOS 10和watchOS 3 API,但仍将使用Swift 2语法。 另外,您可以选择不立即转换代码,而继续使用旧版本的Swift。 准备就绪后,您可以转到Xcode菜单栏中的“ 编辑”>“转换”>“转换为当前Swift语法... ”以转换所有代码。

迁移工具负责处理要从Swift 2中采用Swift 3所需对代码进行的所有更改。这包括更改方法和属性名称,在需要的地方更改语法以及许多其他事情。 在完成转换之前,Xcode将为您显示每个Swift代码文件的待处理更改。 这意味着您可以在进行所有更改之前对其进行验证,以确保迁移工具不会在项目中引入错误。

2.基础

Swift 3版本的主要部分是新的开源Foundation库。 尽管经验丰富的macOS和iOS开发人员会熟悉Foundation框架,但该库为Swift程序员带来了一些新功能。

使用新的Foundation API时,您会注意到的第一个立即更改是缺少NS前缀。 这意味着诸如NSDateNSTimerNSURL类现在只是Swift代码中的DateTimerURL 。 Xcode 8中的代码迁移工具将自动为您重命名所有这些类,但这是所有Swift开发人员在编写新代码时都需要注意的更改。

接下来,作为Swift的核心库,所有的Foundation API现在都与基于Linux的操作系统兼容。 由于Swift与其他平台兼容,因此Foundation库也将兼容。 这意味着Foundation提供的核心功能集(例如日期/时间管理和联网)可以在任何可以使用Swift的地方使用。 这种跨平台的互操作性是从Foundation API中删除NS前缀的主要动机之一。

最后,现在已经对许多Foundation API进行了重新设计,以使其更适合Swift代码。 例如,根据API的不同,此重新设计意味着Foundation现在可以更好地利用以下优势:

  • 使用Swift 2引入的trycatch块改进了错误处理。
  • 可选类型,与将Objective-C Foundation框架导入Swift时创建的所有隐式展开的可选类型相反。
  • 更现代和优化的算法。
  • 使用高度优化的纯Swift编写具有更好的整体性能。

总的来说,与在您自己的Swift代码中使用旧的Foundation框架相比,使用新的Swift Foundation库是更好的体验。 如果您想了解有关开源Swift Foundation库的更多信息,可以在GitHub上进行检查。

3. API命名准则

Swift 3还引入了一些新的API设计指南。 创建它们是为了简化所有Swift API,并使它们保持一致。

省略不必要的词

Swift 3中为了获得更好的API而进行的第一个更改是从方法和属性声明中删除了不必要的单词。 导入Objective-C API时,此更改既充当语言功能,也影响开发人员编写自己的Swift代码的准则。 与功能相同的Swift 3代码相比,以下代码包含一些Swift 2代码示例。

let color = UIColor.redColor() // Swift 2
let color = UIColor.red // Swift 3"Hello World!".capitalizedString // Swift 2
"Hello World!".capitalized // Swift 3// Swift 2
if someString.containsString("a") {}// Swift 3
if someString.contains("a") {}

您将看到Swift 3版本更具可读性。 特别是if语句,它的流程更好,看起来更像英语句子。

功能参数标签

Swift 3实际上撤消了Swift 2中所做的一项更改:在函数中第一个参数的标签。 在Swift 2中,调用函数时,第一个参数的标签会自动被忽略。 例如,声明为:

func addObject(object: AnyObject)

在Swift 2中将通过以下方式调用:

addObject(someObject)

Swift 3撤消了此更改,不再自动忽略第一个参数标签。 这意味着将使用以下命令调用上述函数:

addObject(object: someObject)

但是,此函数的使用现在违背了Swift 3的省略不必要单词的目标。要遵循新的Swift API设计准则,应将函数声明更改为:

func add(object: AnyObject)

然后,此新声明将与以下代码一起使用:

add(object: someObject)

这种新的函数命名格式与Swift 2格式一样,但是具有提供明显与该函数的第一个参数链接的标签的其他好处。

请注意,您仍然可以指定应忽略Swift 3函数的第一个参数标签。 这是通过使用_然后使用要在函数定义中使用的参数名称来实现的,例如:

// Definition
func add(_ object: AnyObject) {// Access parameter through `object` variables
}// Usage
add(someObject)

尽管这是一个非常基本的示例,但是使用更复杂的名称,这种声明函数的新格式变得极为有益。 例如,以下代码显示了一些Swift String方法现在如何从Swift 2更改为Swift 3。

let replaced = someString.stringByReplacingOccurencesOfString("a", withString: "A") // Swift 2
let replaced = someString.replacingOccurences(of: "a", with: "A") // Swift 3let array = listString.componentsSeparatedByString(",") // Swift 2
let array = listString.components(separatedBy: ",") // Swift 3

驼峰下壳,具有枚举和属性

此项更改旨在使Swift 3中的所有属性以及枚举保持一致。 决定,由于枚举值比类更接近属性,因此它们应遵循相同的命名格式。

这是一个相对较小的更改,在转换Swift 2代码时,Xcode迁移工具将完全解决这一更改。 但是,在编写新代码时,所有开发人员都应该意识到这一点。

以下是此更改如何影响特定API的一些示例。

let color = UIColor.redColor().CGColor // Swift 2
let color = UIColor.red.cgColor // Swift 3let alignment = NSTextAlignment.Center // Swift 2
let alignment = NSTextAlignment.center // Swift 3

4.大中央派遣

除了Swift 3,还发布了Grand Central Dispatch(GCD)核心库的开源Swift版本。 GCD是Apple的框架,用于在多核系统上启用并发代码执行。 重写此库的主要目标是:

  • 提供与现有的基于C的GCD函数相同的功能,并带有旨在与其他Swift代码一起良好工作和阅读的API。
  • 提供一套跨平台的API,就像Foundation核心库一样,将在兼容Swift的任何地方使用。

对于在Apple平台上使用GCD API经验丰富的开发人员,此新Swift版本将很容易理解。 它遵循相同的概念。 以下代码显示了如何使用Swift 3代码完成一些常见的GCD任务:

// Doing work on a background thread
let queue = DispatchQueue(label: "threadName")
queue.async {// Execute work
}// Doing work on the main thread
DispatchQueue.main.async {// Execute work
}// Doing work with a specified `Quality of Service`
let quality = DispatchQoS.background
queue.async(qos: quality) {// Execute work
}// Doing work after an amount of time
let delay = DispatchTime.now() + .seconds(10)
DispatchQueue.main.after(when: delay) {// Execute work
}

如果您想了解更多有关Swift 3中的并发编程和GCD的信息,可以查看今年的Apple的WWDC会议以及Dispatch框架参考的Swift版本。

5.开源的好处

自从2015年12月Apple开源编程语言以来,Swift 3并不是一个新功能或更改,它是第一个发行版。完全开源是它带来的许多好处,这在以后的Swift版本中将变得更加明显。

首先,使Swift及其核心库完全开放源代码意味着开发人员可以移植Swift在其他平台和操作系统上工作。 目前,除现代版本的Ubuntu外,Swift还与所有Apple平台兼容。 随着时间的流逝,Swift可能会移植到其他操作系统,包括Android和Windows。 这有可能使Swift成为真正的跨平台语言,并被非Apple开发人员更多地使用。

接下来,让Swift的所有内部工作对公众可见,这意味着非Apple员工可以为该语言做出贡献。 除了新功能外,专家开发人员还可以为Swift内的错误修复,改进和优化做出贡献。

结论

我已经向您展示了版本3中Swift语言带来的一些最重要的变化。这是一个重要的发行版,因为除了所有新功能和核心库API之外,它还提供了Swift如何发展的清晰视野。在未来的几年。 如果Swift 3的更改有任何迹象,那么该语言只会为开发人员带来越来越多的乐趣。

翻译自: https://code.tutsplus.com/articles/whats-new-in-swift-3--cms-27630

Swift 3有什么新功能?相关推荐

  1. swift4 linux,Swift 4正式发布,新功能概览

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

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

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

  3. Swift 5.4 有什么新功能?

    Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 转自:掘金  CainLuo https://jue ...

  4. ios设计登录功能_亲爱的产品设计师,这是iOS 14的新功能

    ios设计登录功能 On June 22, 2020 Apple previewed iOS 14 for the first time. As always there are quite some ...

  5. TIOBE 3月榜单:新功能将加入,C语言仍高居榜首

    喜欢就关注我们吧! TIOBE 公布了 2021 年 3 月的编程语言排行榜. 本月 TIOBE 指数没有什么有趣的变化.因此,TIOBE CEO Paul Jansen 表示,其打算透露一些近期将加 ...

  6. 战神4 幕后花絮 概念艺术_Java 9幕后花絮:新功能从何而来?

    战神4 幕后花絮 概念艺术 找出Java幕后发生的事情,以及新功能如何实现 在上一篇文章中,我们介绍了即将发布的Java 9版本的新功能和尚待解决的功能,并简要提到了将新功能添加到下一个版本之前要经历 ...

  7. Java 9幕后花絮:新功能从何而来?

    找出Java幕后发生的事情,以及新功能如何实现 在上一篇文章中,我们介绍了即将发布的Java 9版本的新功能和尚待解决的功能,并简要提到了将新功能添加到下一个版本之前要经历的过程. 由于此过程几乎影响 ...

  8. openstack 功能_2016年OpenStack的新功能:看一下Newton版本

    openstack 功能 OpenStack的发布周期为六个月,每个发行版都有一个代号,名称以字母的连续字母开头. 10月7日,OpenStack Newton发布了. 让我们看一下OpenStack ...

  9. xcode11 新功能_Xcode 11功能

    xcode11 新功能 WWDC 2019 is over and we can't wait to discuss what's in store for the developers. Today ...

最新文章

  1. GeoIP的使用 - PHP版
  2. .NET中读取csv文件内容
  3. 薅羊毛的齐家网遭增长瓶颈,互联网家装迎来破局者!1-06-13
  4. 大型网站后台架构的演变
  5. esxi 部署模板_vSphere使用模板部署虚拟机
  6. mysql导入数据提前修改字段_Mysql一些导入导出数据库,添加修改字段命令_MySQL...
  7. 实现 npm script 跨平台兼容
  8. Fit项目分页组件的编写
  9. ubuntu18.04搭建nfs
  10. 内推|网易高级数据分析师(地点:杭州)
  11. angular.js双向数据绑定实现动画特效
  12. Android中向ContactsProvider中插入大量联系人
  13. 虚幻c++入门到入土(一)VS插件Resharper使用
  14. uni 加入图标_uniapp如何更改图标
  15. Cookie、Session的使用及区别
  16. ”微服务一条龙“最佳指南-工具篇:初步使用Pipenv
  17. js逆向 空气质量检测平台
  18. java中怎么输入中文_MultiMC下载-MultiMC中文实用版 v1.0
  19. 直入樱花深处,静待落英满襟
  20. [ERROR] Please refer to XXXXXXXXXXX for the individual test result

热门文章

  1. Reflections
  2. 122.(leaflet篇)leaflet地图图片之间存在缝隙
  3. wordpress修改站点地址之后无法打开网站
  4. mysql 1118错误_Mysql 出现Error 1118的一种解决方法 | 学步园
  5. 第三方支付宝支付(非真实金额支付)
  6. MUI框架之移动端前端开发对dialog与button轮播的深入运用与实战
  7. 在envi做随机森林_基于模糊孤立森林算法的多维数据异常检测方法
  8. 3DevFest2015 珠海回顾!
  9. delphi CopyFile的基础用法
  10. 线程池 allowCoreThreadTimeOut 小知识