Swift中的一等公民-函数(Func)

Swift中的一等公民-函数(Func)_第1张图片
goddess

函数的定义

  1. 无参数无返回值
    func callFunc(){
    print("func")
    }
    2.有参数无返回值
    func callFunc(paramer: [String: String]){
    print(paramer)
    }
    3.调用函数
    callAdd()
    callFunc(paramer: ["name" : "二先生"])
    【注意】函数是特殊的闭包

闭包的定义

  //定义一个闭包
    let callAdd: (Int,Int)->(Int) = { a,b  in
        return a + b
    }

let closeur = {(x: Int)->(Int) in
            
            return x
        }
        print(closeur(19))

在swift 中的闭包和oc中的block 不仅定义差不多连使用场景也一样 : 1. 定义一个{}包装的代码块。2. 等到需要的时候在调用。 3 . 可以做为函数的参数传递

使用场景: 1. 异步请求数据的回调。2. 视图控制器的回调 3. 自定义视图的回调
第一种最常用的用法:数据回调

//定义全局函数记录closure 
var closureCompletion: (()->())?
//closure
 //@escaping 如果闭包在函数执行完后才被调用,称为逃逸闭包。典型的列子就是网络请求结束后,回调请求的数据
 //@noescape  非逃逸闭包。snapkit 添加约束的方法就是非逃逸闭包

func loadData(completion: @escaping ()->()) -> () {
        closureCompletion = completion
        DispatchQueue.global().async {
             sleep(3)//耗时
            DispatchQueue.main.async(execute: { 
                //回调
                completion()
            })
        }
    }

【这样就形成了你中有我,我中有你就需要破环,避免循环引用占用内存】
  方法1:      weak var weakSelf = self //破除循环
        //回调
        loadData {
            weakSelf?.view.backgroundColor = UIColor.red //closure 对 self的引用
//             ? 和 ! 的区别
//                ?可选解包     如果取出来的对象为nil,就不会去调用get method
//                !强制解包 ,强制解包会调用对象的get method。一般用于取出可选对象的值来参与运算
        }
方法2 : loadData {[weak self] in
 self?.view.backgroundColor = UIColor.red //closure 对 self的引
}
}

前2天在改问题的时候,犯了一个错误:tableView的footerView添加了一个二维码设置居中的时候,始终是错开的。刚开始我还以为需要转换到同一坐标系的做法! 最后老铁提醒,原来是The superView is not same

Swift中的一等公民-函数(Func)_第2张图片
mistake

把 imgeView.center = CGPointMake(footView.oa_width / 2.0,footView.oa_height / 2.0); 搞定

你可能感兴趣的:(Swift中的一等公民-函数(Func))