Swift 3有什么新功能?
介绍
今年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
前缀。 这意味着诸如NSDate
, NSTimer
和NSURL
类现在只是Swift代码中的Date
, Timer
和URL
。 Xcode 8中的代码迁移工具将自动为您重命名所有这些类,但这是所有Swift开发人员在编写新代码时都需要注意的更改。
接下来,作为Swift的核心库,所有的Foundation API现在都与基于Linux的操作系统兼容。 由于Swift与其他平台兼容,因此Foundation库也将兼容。 这意味着Foundation提供的核心功能集(例如日期/时间管理和联网)可以在任何可以使用Swift的地方使用。 这种跨平台的互操作性是从Foundation API中删除NS
前缀的主要动机之一。
最后,现在已经对许多Foundation API进行了重新设计,以使其更适合Swift代码。 例如,根据API的不同,此重新设计意味着Foundation现在可以更好地利用以下优势:
- 使用Swift 2引入的
try
和catch
块改进了错误处理。 - 可选类型,与将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有什么新功能?相关推荐
- swift4 linux,Swift 4正式发布,新功能概览
Swift最新的主要版本提供了针对语言本身以及标准库的大量改动和更新,最重要的变化包括新增的String功能.扩展集合.归档和序列化等. Swift 4中,String已全面遵循Collection协 ...
- Swift 4正式发布,新功能概览
Swift最新的主要版本提供了针对语言本身以及标准库的大量改动和更新,最重要的变化包括新增的String功能.扩展集合.归档和序列化等. \\ Swift 4中,String已全面遵循Collecti ...
- Swift 5.4 有什么新功能?
Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 转自:掘金 CainLuo https://jue ...
- ios设计登录功能_亲爱的产品设计师,这是iOS 14的新功能
ios设计登录功能 On June 22, 2020 Apple previewed iOS 14 for the first time. As always there are quite some ...
- TIOBE 3月榜单:新功能将加入,C语言仍高居榜首
喜欢就关注我们吧! TIOBE 公布了 2021 年 3 月的编程语言排行榜. 本月 TIOBE 指数没有什么有趣的变化.因此,TIOBE CEO Paul Jansen 表示,其打算透露一些近期将加 ...
- 战神4 幕后花絮 概念艺术_Java 9幕后花絮:新功能从何而来?
战神4 幕后花絮 概念艺术 找出Java幕后发生的事情,以及新功能如何实现 在上一篇文章中,我们介绍了即将发布的Java 9版本的新功能和尚待解决的功能,并简要提到了将新功能添加到下一个版本之前要经历 ...
- Java 9幕后花絮:新功能从何而来?
找出Java幕后发生的事情,以及新功能如何实现 在上一篇文章中,我们介绍了即将发布的Java 9版本的新功能和尚待解决的功能,并简要提到了将新功能添加到下一个版本之前要经历的过程. 由于此过程几乎影响 ...
- openstack 功能_2016年OpenStack的新功能:看一下Newton版本
openstack 功能 OpenStack的发布周期为六个月,每个发行版都有一个代号,名称以字母的连续字母开头. 10月7日,OpenStack Newton发布了. 让我们看一下OpenStack ...
- xcode11 新功能_Xcode 11功能
xcode11 新功能 WWDC 2019 is over and we can't wait to discuss what's in store for the developers. Today ...
最新文章
- GeoIP的使用 - PHP版
- .NET中读取csv文件内容
- 薅羊毛的齐家网遭增长瓶颈,互联网家装迎来破局者!1-06-13
- 大型网站后台架构的演变
- esxi 部署模板_vSphere使用模板部署虚拟机
- mysql导入数据提前修改字段_Mysql一些导入导出数据库,添加修改字段命令_MySQL...
- 实现 npm script 跨平台兼容
- Fit项目分页组件的编写
- ubuntu18.04搭建nfs
- 内推|网易高级数据分析师(地点:杭州)
- angular.js双向数据绑定实现动画特效
- Android中向ContactsProvider中插入大量联系人
- 虚幻c++入门到入土(一)VS插件Resharper使用
- uni 加入图标_uniapp如何更改图标
- Cookie、Session的使用及区别
- ”微服务一条龙“最佳指南-工具篇:初步使用Pipenv
- js逆向 空气质量检测平台
- java中怎么输入中文_MultiMC下载-MultiMC中文实用版 v1.0
- 直入樱花深处,静待落英满襟
- [ERROR] Please refer to XXXXXXXXXXX for the individual test result
热门文章
- Reflections
- 122.(leaflet篇)leaflet地图图片之间存在缝隙
- wordpress修改站点地址之后无法打开网站
- mysql 1118错误_Mysql 出现Error 1118的一种解决方法 | 学步园
- 第三方支付宝支付(非真实金额支付)
- MUI框架之移动端前端开发对dialog与button轮播的深入运用与实战
- 在envi做随机森林_基于模糊孤立森林算法的多维数据异常检测方法
- 3DevFest2015 珠海回顾!
- delphi CopyFile的基础用法
- 线程池 allowCoreThreadTimeOut 小知识