swift

作者: 苹果上的小豌豆 | 来源:发表于2018-11-07 16:21 被阅读0次

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

相关文章

网友评论

      本文标题:swift

      本文链接:https://www.haomeiwen.com/subject/vderxqtx.html