Swift 3.0 都改变了什么语法?

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
查看查看618 回复回复4 收藏收藏1 分享淘帖 转播转播 分享分享 微信
查看: 618|回复: 4
收起左侧

Swift 3.0 都改变了什么语法?

[复制链接]
swifter 发表于 2016-7-26 14:24:30 | 显示全部楼层 |阅读模式
快来登录
获取优质的苹果资讯内容
收藏热门的iOS等技术干货
拷贝下载Swift Demo源代码
订阅梳理好了的知识点专辑
经历了从Swift 1.0 到2.0,一个版本之后代码居然就不兼容了。这如何在团队推广呢?没有想到3.0居然变化更加的大。有多大,来体会一下:

[Swift] 纯文本查看 复制代码
UIFont.preferredFontForTextStyle(UIFontTextStyleSubheadline)
UIFont.preferredFont(forTextStyle: UIFontTextStyleSubheadline)
 
override func numberOfSectionsInTableView(tableView: UITableView) -> Int
override func numberOfSections(in tableView: UITableView) -> Int


在Swift 2.x的时代基本上ObjC的接口是什么样的,那么Swift的方法名称也是一样的。

在Swift发布的时候,其实很多人都发现其语法有很多脚本语言的特征。但是方法名称还是保留着ObjC的“见名知义”的特征,那叫一个长,把这个方法的功能里里外外都说明的非常清楚。但是,其实这些没有完全的必要。所以在Swift 3.0里使用方法里参数的lable来完成说明方法功能的作用。

Swift 3.0 都改变了什么语法?

Swift 3.0 都改变了什么语法? - 敏捷大拇指 - Swift 3.0 都改变了什么语法?





1、去掉多余文字

所谓“去掉多余文字”就是把原来iOS SDK方法名称里的描述性文字都移到方法的label里面。并且原来方法第一个参数的label可以不写的,现在所有label在调用的时候都需要给出,除非特殊说明。这样的修改就大大的说短了方法名。

[Swift] 纯文本查看 复制代码
attributedString.appendAttributedString(anotherString)
attributedString.append(anotherString)
 
names.insert("Jane", atIndex: 0)
names.insert("Jane", at: 0)
 
UIDevice.currentDevice()
UIDevice.current()





2、第一个参数的label

如上所述,方法的第一个参数的label在Swift 2.x版本里调用的时候是不用写的,但是在3.0版本必须给出。

[Swift] 纯文本查看 复制代码
NSTimer.scheduledTimerWithTimeInterval(0.35, target: self, selector: #selector(reset), userInfo: nil, repeats: true)
NSTimer.scheduledTimer(timeInterval: 0.35, target: self, selector: #selector(reset), userInfo: nil, repeats: true)


如果说你在自己定义的方法在调用的时候不需要label,那么需要显式的用下划线“_”表明。

[Swift] 纯文本查看 复制代码
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { ... }
override func didMoveToView(_ view: SKView) { ... }





3、对SDK里C的改造

这是千呼万唤始出来的修改。之前对于c接口的调用基本上保持了和ObjC调用一致的风格:

[Swift] 纯文本查看 复制代码
let ctx = UIGraphicsGetCurrentContext()
let rectangle = CGRect(x: 0, y: 0, width: 512, height: 512)
CGContextSetFillColorWithColor(ctx, UIColor.blueColor().CGColor)
CGContextSetStrokeColorWithColor(ctx, UIColor.whiteColor().CGColor)
CGContextSetLineWidth(ctx, 10)
CGContextAddRect(ctx, rectangle)
CGContextDrawPath(ctx, .FillStroke)
UIGraphicsEndImageContext()


在Swift3.0中也改造成了Swift风格的API:

[Swift] 纯文本查看 复制代码
if let ctx = UIGraphicsGetCurrentContext() {
    let rectangle = CGRect(x: 0, y: 0, width: 512, height: 512)
    ctx.setFillColor(UIColor.blue().cgColor)
    ctx.setStrokeColor(UIColor.white().cgColor)
    ctx.setLineWidth(10)
    ctx.addRect(rectangle)
    ctx.drawPath(using: .fillStroke)
 
    UIGraphicsEndImageContext()
}


还有GCD部分的API也已经改造。GCD是完全用C写的一个叫做libdispatch的库。在Swift3.0中是这样的:

[Swift] 纯文本查看 复制代码
let queue = DispatchQueue(label: "com.test.myqueue")
queue.async {
  print("Hello World")
}


与之前的调用方式差别很大,之前是这样的:

[Swift] 纯文本查看 复制代码
let queue = dispatch_queue_create("com.test.myqueue", nil)
dispatch_async(queue) {
    print("Hello World")
}





4、方法类型

在一个方法可以接受另外一个方法作为参数传入的时候,这个方法的定义在Swift2.0里是这样的:

[Swift] 纯文本查看 复制代码
func g(a: Int -> Int) -> Int -> Int { ... }


a: Int -> Inta是一个接受一个Int参数,返回一个Int值的方法的定义。在Swift3.0里是这样定义的:

[Swift] 纯文本查看 复制代码
func g(a: (Int) -> Int) -> (Int) -> Int { ... }


更加易读。至少能看出来接受一个Int型参数了。




5、最后

以上是一些经常会接触到的改变。其他的改变还有性能的提升,和编译后APP提及的缩减。这些不是一眼能看见的改变也是非常的巨大的。但是,更加有魅力也更加实用的改变是Swift Package Manager有了这个工具就可以直接像js的npm,python的pip一样,一个命令搞定全部包和包的依赖项。顿时感觉天空一片晴朗有木有!

另外还有很重要的一点。Swift已经发展到一定的程度,语言本身已经基本定型。所以从这个版本开始Swift社区把代码的兼容放在一个比较靠前的位置来考虑了。至少按照官方的说法是不到万不得已不破坏代码的向前兼容(最前也就到Swift3.0了)。可以考虑在在团队中引入Swift了。




Swift 3.0 相关内容:

宣告Swift3结束和Swift4开启

Swift 3中的新特性 What's New in Swift 3 ?

包括了Swift 3的Xcode 8新特性 new features in Xcode 8

Swift 3.0 都改变了什么语法?

是时候适配 Swift 3 了吗——专访 LINE iOS 开发工程师王巍

Swift 3 API 设计准则 Swift 3 API Design Guidelines

Swift 3.0 API设计准则 详细内容解读 Swift 3.0 API Design Guidelines

Swift 3.0 Preview 1 Released! Swift 3.0开发者预览版(第一版)发布

苹果开发者大会纪要,Swift 3.0:print("WWDC@2016 by swifthumb.com");

苹果发布Swift 3.0首个预览版:核心代码又有改进哦!Swift进军路线图

Swift v3.0-PREVIEW-1 发布

Swift 3.0预告:将Objc库转换成更符合Swift语法风格的形式

Swift 3.0预测:扩展性更强、类型系统重构、完善泛型

我们期待的 Swift 3.0 将会是什么样?

令人意外:苹果应用极少采用Swift语言开发,等Swift 3.0强制?




作者:小红星闪啊闪


都看到这里了,就把这篇资料推荐给您的好朋友吧,让他们也感受一下。

回帖是一种美德,也是对楼主发帖的尊重和支持。

*声明:敏捷大拇指是全球最大的Swift开发者社区、苹果粉丝家园、智能移动门户,所载内容仅限于传递更多最新信息,并不意味赞同其观点或证实其描述;内容仅供参考,并非绝对正确的建议。本站不对上述信息的真实性、合法性、完整性做出保证;转载请注明来源并加上本站链接,敏捷大拇指将保留所有法律权益。如有疑问或建议,邮件至marketing@swifthumb.com

*联系:微信公众平台:“swifthumb” / 腾讯微博:@swifthumb / 新浪微博:@swifthumb / 官方QQ一群:343549891(满) / 官方QQ二群:245285613 ,需要报上用户名才会被同意进群,请先注册敏捷大拇指

嗯,不错!期待更多好内容,支持一把:
支持敏捷大拇指,用支付宝支付10.24元 支持敏捷大拇指,用微信支付10.24元

评分

参与人数 1金钱 +10 贡献 +10 专家分 +10 收起 理由
Anewczs + 10 + 10 + 10 32个赞!专家给力!

查看全部评分

本帖被以下淘专辑推荐:

代码买卖 发表于 2016-7-28 17:05:14 | 显示全部楼层
Mark!
救世主 发表于 2016-9-4 00:02:20 | 显示全部楼层
优雅多了~
rightnow 发表于 2016-9-4 23:44:01 | 显示全部楼层
学习了!
firefighter 发表于 2016-9-15 21:11:06 | 显示全部楼层
Mark……
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

做任务,领红包。
我要发帖

分享扩散

都看到这里了,就把这资料推荐给您的好朋友吧,让他们也感受一下。
您的每一位朋友访问此永久链接后,您都将获得相应的金钱积分奖励
热门推荐

合作伙伴

Swift小苹果

  • 北京治世天下科技有限公司
  • ©2014-2016 敏捷大拇指
  • 京ICP备14029482号
  • Powered by Discuz! X3.1 Licensed
  • swifthumb Wechat Code
  •   
快速回复 返回顶部 返回列表