美文网首页Swift一步步学习
Swif学习之闭包的使用

Swif学习之闭包的使用

作者: coderhlt | 来源:发表于2018-05-18 18:07 被阅读6次

一、闭包的定义

闭包和OC中的block非常相似,OC中的block是匿名的函数
Swift中的闭包是一个特殊的函数。在swift中也算是一种特殊的数据类型,即闭包类型。

  • 1、闭包的定义
  //无参数、无返回值的闭包
       let callback :() -> (Void) = {    () -> (Void)  in
                                      print("这是一个完整的没有参数,没有返回值的闭.   包")
                                  }

           callback ()

  //有参数、无返回值的闭包
 let callback: (String) -> (Void)  = {  (str:String) -> (Void) in
                                      print("这是一个完整的有参数,没有返回值的闭包")              
                                 }
           callback ("11111")
  //有参数、有返回值的闭包
  let callback: (String) -> (String) = { (str:String) -> (String) in
           
                                    print("这是一个完整的有参数,有返回值的闭包")
                                    return "1111";
          
                                     }
   let str = callback("ssss")
   print(str)
  ---------------------------------------------------------------------总结:
闭包的写法:
    闭包类型的写法:(形参列表)->(返回值)
    闭包值的写法:
    {
        (形参) -> 返回值类型 in
        // 执行代码
    }
  ---------------------------------------------------------------------
#pragma mark - 无参数无返回值闭包其他省略写法
 let callback1  = { () in
                  print("没有参数,没有返回值的闭包")
                  }
         callback1 ()

 let callback2  = {
            print("没有参数,没有返回值的闭包")
        }
         callback2 ()

  • 2、尾随闭包
//2.1.闭包作为参数传递
        func test(callback:() -> ()){
            callback()
        }
        test(callback: {() -> () in
             print(122)
        })
        
        func test1(testback:(Int) -> () ){
            testback(22222)
        }
    
        test1(testback:{(a:Int) -> () in
            print(a);
        })
//2.2.尾随闭包
a、如果闭包是函数的最后一个参数,则可以将闭包写在()后面,这种写法就是尾随闭包。  

//函数一个参数
     test1(testback:) {  (a:Int) -> () in
            print(a);
       }
        

//函数多个参数
    func test1(c:Int ,testback:(Int) -> () ){
            testback(3333)
        }
      test1(c:12){(a:Int) -> () in
            print(a);
        }
        
b、如果函数只有一个参数,并且这个参数是闭包,那么()可以不写
        func test1(testback:() -> () ){
            testback()
        }
        
        test1{() -> () in
            print(12345678);
        }
     
c、 网络请求工具类
import UIKit
class HttpTool: NSObject {
    func requestData(finishedCallback:(String) -> ()) {
        finishedCallback("response");
    }
}
  

 import UIKit
 class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
//        httptool.requestData(finishedCallback:{ (str:String) in
//            print(str)
//        })
//    }

//        httptool.requestData() { (str:String) in
//           print(str)
//        }

      let httptool = HttpTool()
        httptool.requestData { (str:String) in
           print(str)
        }

    }

}

  
  • 3、逃逸(escaping)
    一个接受闭包作为参数的函数,逃逸闭包(可能)会在函数返回之后才被调用,也就是说闭包逃离了函数的作用域
import UIKit

class HttpTool: NSObject {//@escaping逃逸的
    func requestData(finishedCallback:@escaping (String) -> ()) {
        DispatchQueue.global().async {
             finishedCallback("response");
        }

    }

}

相关文章

  • Swif学习之闭包的使用

    一、闭包的定义 闭包和OC中的block非常相似,OC中的block是匿名的函数Swift中的闭包是一个特殊的函数...

  • Swift~ @escaping @noescaping 逃逸

    闭包表达式语法 闭包表达式语法有如下的一般形式: 闭包只有在函数中做参数时,才会区分逃逸闭包和非逃逸闭包 Swif...

  • swift闭包学习

    闭包作为参数 参考 Swift学习之闭包

  • Swift中的闭包表达式

    闭包是自包含的函数代码块,可以在代码中被传递和使用闭包可以捕获和存储其所在上下文中的任意常量和变量的引用 Swif...

  • Swift5.x-枚举(中文文档)

    引言 继续学习Swift文档,从上一章节:闭包,我们学习了Swift闭包相关的内容,如闭包的定义和使用、闭包的简写...

  • 每日一问18——swift基础(04)及后续补充

    swift中的闭包 闭包的定义 先回忆oc中的block语法,详细可以回顾每日一问01——block 而在swif...

  • Rust 闭包学习 (Fn/FnMut/FnOnce)

    学习 Rust 闭包记录 闭包作为参数 闭包作为结构体属性 异步使用闭包 主要就是加 Send trait,没加 ...

  • Swift超基础语法(闭包篇)

    "闭包,Swift中的新概念,然而除了写法不同,实际上用法与用途都和OC中的Block没什么不同" 闭包 Swif...

  • Swift学习笔记(1)

    SWift学习笔记 闭包 闭包表达式 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 ...

  • groovy-闭包

    定义和执行闭包 闭包作为参数返回 闭包作为参数传递 闭包使用外部变量 注意: 闭包可使用(引用)闭包外部定义的变量...

网友评论

    本文标题:Swif学习之闭包的使用

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