1.if let 和if var 连用的语法,在赋值的同时进行判断。可能为nil的情况
2.guard let else 使用同名的变量接收值,在后续使用都是非空值,不需要解包
3.下划线_在swift中可以忽略任何不感兴趣的内容。
4.函数的外部参数会让函数读起来更直观。比如
直观的: functableView(_tableView:UITableView, didSelectRowAt indexPath:IndexPath)
不直观的: funcgotoFollow(model:XZBHomeAlbumModel, btn:UIButton)
5.通过设置函数的默认值,在调用函数的时候可以任意组合参数,如果没有指定,就用默认值。
6.闭包。提前准备好代码,在需要的时候执行,可以当做参数传递。
7.尾随闭包。如果函数的最后一个参数是闭包,函数参数可以提前结束,最后一个参数直接使用{}包装闭包的代码
{(形参列表)in} 需要使用in这个关键字分隔定义和实现
8.闭包中的循环引用。单方向的引用不会产生循环引用。满足,闭包对self引用,self对闭包引用。(闭包对self进行了copy,闭包执行完成之后,会自动销毁,同时释放对self的引用。)
9.二种解除循环引用的方法。推荐[weak self], [unowned self]
10.懒加载初始化,提前分配空间,减少内存消耗。
11.反射机制。NSClassFromString
12.try 的json 序列化
13.使用KVC定义模型属性的时候,如果是对象,通常是可选的。如果是基础数据类型,比如int,不能设置为可选,要设置初始值,var age : Int = 0,也不能加属性设为私有private。
14. 在swift中...和..<我们应用在“for...in 的访问”还可以
let test = "helLo" let interval = "a"..."z" for c in test.characters { if !interval.contains(String(c)) { print("\(c) 不是小写字母") }}”
15.lazy 延时加载
“lazy var str: String = "Hello”
“let data = 1...3 let result = data.lazy.map { (i: Int) -> Int in print("正在处理 \(i)") return i * 2 } print("准备访问结果") for i in result { print("操作后结果为 \(i)") } print("操作完毕")”
16.where
17.mutating
“Swift 的 protocol 不仅可以被 class 类型实现,也适用于 struct 和 enum。因为这个原因,我们在写给别人用的协议时需要多考虑是否使用 mutating 来修饰方法,比如定义为 mutating func myMethod()。Swift 的 mutating 关键字修饰方法是为了能在该方法中修改 struct 或是 enum 的变量,所以如果你没在协议方法里写 mutating 的话,别人如果用 struct 或者 enum 来实现这个协议的话,就不能在方法里改变自己的变量了。比如下面的代码”
18.元组tuple









网友评论