美文网首页
swift 闭包

swift 闭包

作者: 鹏飞说 | 来源:发表于2018-05-02 13:34 被阅读3次

    创建一个类

    import UIKit
    
    class HttpTools {
        //闭包类型: (参数列表) -> (返回值类型)
        func loadData(_ finishCallback : @escaping (_ jsonData : String) -> ()) {
            //发送异步请求
            DispatchQueue.global().async {
                print("发送异步网络请求\(Thread.current)")
                //回到主线程
                DispatchQueue.main.sync {
                    print("回到主线程\(Thread.current)")
                    //回调参数
                    finishCallback("json数据")
                }
            }
            
            
        }
    }
    

    对于闭包的使用

    import UIKit
    
    class ViewController: UIViewController {
        
        var httpTools :HttpTools?
        
        override func viewDidLoad() {
            super.viewDidLoad()
    
            httpTools = HttpTools()
            
            
            // Do any additional setup after loading the view, typically from a nib.
        }
        
        override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
            print("-------")
            /* self. 一般是可以省略的
             1> 如果该昂发中有局部变量和成员属性有歧义(民称相同)
             2> 在闭包中使用成员变量
            */
            httpTools?.loadData({ (jsonData : String) in
                print("在viewController这里是打印的数据\(jsonData)")
                self.view.backgroundColor = UIColor.red
                
            })
            
            //尾随闭包的概念
            //如果在函数中。闭包是最后一个参数,那么可以写成尾随闭包
            httpTools?.loadData(){ (jsonData : String) in
            }
            //如果是唯一的参数,可一个将前面的()省略
            httpTools?.loadData { (jsonData : String) in
                
            }
        }
        deinit {
            print("viewController -- deinit")
        }
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    }
    

    相关文章

      网友评论

          本文标题:swift 闭包

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