博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记录一下Swift3.0的一些代码格式的变化
阅读量:5918 次
发布时间:2019-06-19

本文共 3091 字,大约阅读时间需要 10 分钟。

一.去重:

1>颜色:

UIColor.whiteColor() 被改为 UIColor.white()

2>数组取值:

list.objectAtIndex(i) 被改为 list.object(at: i)

3>present:

presentViewController(controller, animated: true) 被改为 present(toViewController: controller, animated: true)

4> cell:

dequeueReusableCellWithIdentifier("Cell", forIndexPath:indexPath) 被改为 dequeueReusableCell(withIdentifier: "Cell", for: indexPath)

5>tableView

func numberOfSectionsInTableView(tableView: UITableView) -> Int 被改为 func numberOfSections(in tableView: UITableView) -> Int

二.参数

1
2
3
4
5
6
7
8
9
10
11
12
13
override
func viewWillAppear(animated: Bool)
被改为
override
func viewWillAppear(_ animated: Bool)
下面再看一个实例的调用例子,加深印象:
 
func myFunc(x: Int, y: Int)
这个函数在调用时必须使用以下代码
myFunc(x: 1, y: 2)
若是允许匿名参数,则修改之:
 
func myFunc(_ x: Int, _ y: Int)
这个函数在调用时允许不带参数名称
myFunc(1, 2)

三、命名

1>对齐方式:

lbl.textAlignment = NSTextAlignment.Center

被改为

lbl.textAlignment = NSTextAlignment.center

2>CGRect:

tableFooterView = UIView(frame: CGRectZero) 被改为 tableFooterView = UIView(frame: CGRect.zero)

3>CGRectZero:

CGRectZero改为CGRect.zero

4>hidden:

lbl.hidden = false 被改为 lbl.isHidden = false

5>Bundle:

let bundle = NSBundle.mainBundle() 被改为 let bundle = Bundle.main()

6>FileManager:

let mgr = NSFileManager.defaultManager() 被改为 let mgr = FileManager.default()

 

 

四、方法的返回值处理

 

1>我们在开发中可能会经常调用一些带有返回值的方法,但是却不处理返回值,例如以下这种:

 

navigationController!.popViewControllerAnimated(true)

 

这个方法实际上返回一个 UIViewController,但是很少有人会用,更多的场景是把它当成无返回的方法来使用。但是在 Swift 3 中,这样做是不行的,你必须处理掉这个返回值,如下:

 

let _ = navigationController!.popViewController(animated: true)

 

 使用单个下划线来指代一个不会被使用的变量。

 

2>Swift 3 不再允许传入传出的对象,之前带有 var 的方法声明将全部作废:

1
2
3
4
func myFunc(
var
a: Int) -> Int
如以上这种声明,已不可再使用,对于有多个值要返回的方法,必须改为:
 
fun myFunc(a: Int) -> (Int, Int)

 

五、可选类型

var str: String! = "a"
var s = strprint(s)
六、Selector
Swift 3 对可选类型的处理更严格了,必须显式的在任何地方使用感叹号,例如我们有以下代码:
self.performSelector(onMainThread: #selector(handle(ret:)), with: ret, waitUntilDone: true)就以 Swift 3 下的这个函数为基准吧,老版本的Selector获取方法是这样的:#selector(ViewController.handle(_:))    // 2.2 #selector(ViewController.handle(:)) // 2.1 #selector(handle) // 2.0 @selector("handle:") // 1.x x等于几已经不记得了 "handle:" // 没记错的话是 1.0 时代,直接传个字符串就是 Selector N/A // Swift 的历史上,还真有过没有 Selector 的版本

回到 Swift 3 上来,目前的 Selector 写法如最上面那种,需要注意的是,Selector 的方法名和参数名必须与实际被调用的方法完全一致,否则编译时就会报错。 <用2.0的写法貌似也是可以调用的!!!>

另外,Selector 传参时,只能传递对象,不能传基础数据类型,传基础数据类型的情况下,一律变成0(希望这只是当前版本的 bug,不然太蛋疼了)。虽说苹果已经把大部分的 NS 类都去掉了前缀,但是 NSNumber 这东西还是得经常用一下呢?

七、类库 1>协议的可选
@objc protocol MyProtocol: NSObjectProtocol {      optional func foo(myClass: MyClass?)      optional func bar(myClass: MyClass?)}需要改为@objc protocol MyProtocol: NSObjectProtocol {      @objc optional func foo(myClass: MyClass?)      @objc optional func bar(myClass: MyClass?)}

2>图形图象库:

let imgData = UIImageJPEGRepresentation(img, 1)let imgPath = "\(FileUtils.getDocumentPath())/\(name)" imgData!.writeToFile(imgPath, atomically: true) 必须改为 let imgData = UIImageJPEGRepresentation(img, 1) let imgPath = "\(FileUtils.getDocumentPath()!)/\(name!)" NSData(data: imgData!).write(toFile: imgPath, atomically: true)

 

参考链接: http://gold.xitu.io/entry/576bd4595bbb500059463426

转载地址:http://rrfvx.baihongyu.com/

你可能感兴趣的文章
ssh 与 locale
查看>>
使用makecontext实现用户线程【转】
查看>>
Ext.Net学习笔记05:Ext.Net DirectEvents用法详解
查看>>
将Flash 嵌入WPF 程序
查看>>
《自己动手做交互系统》——2.3 制作过程
查看>>
保存138亿年?!5维磁盘在南安普顿大学研制成功
查看>>
react的生命周期有哪些?有什么需要注意的地方?
查看>>
闭包 !if(){}.call()
查看>>
关闭CentOS6启动进度条,显示详细自检信息
查看>>
垂直居中的几种实现方法
查看>>
CentOS-6.5安装配置Tomcat-7
查看>>
dubbo-admin部署在windows下tomcat报错的问题
查看>>
对于升级ubuntu libstdc++到GLIBCXX_3.4.17出错问题
查看>>
CSS定位
查看>>
通过GlusterFS黏合多节点SSD剩余空间
查看>>
Confluence 6 使用 JConsole 监控本地 Confluence
查看>>
商店销售某一商品,商店每天公布统一的折扣(discount)
查看>>
ASP.NET Web API中参数的传递方式
查看>>
U盘量产--多系统安装
查看>>
分布列表实现的简单路由过滤
查看>>