Swift中闭包

1.闭包

可以通过定义属性或者定义方法进行回调的操作

1️⃣无参无返回值

typealias funcBlock = () -> ()

(1)定义属性

var parameterBlock : funcBlock?
if parameterBlock != nil{
    parameterBlock!();
}

对应的调用

 block.parameterBlock = {() -> () in
     print("无参无返回值")
 }

(2)定义成方法

 func testBlock(blockfunc: funcBlock!){
        if (blockfunc) != nil{
            blockfunc() 
        }
  }

对应的调用

 block.testBlock {
      print("-------func--------")
 }

2️⃣有参无返回值

   typealias callBackBlock = (_ index : String ) -> ()         
    
   func callBackFuncBlock(blockfunc: callBackBlock!) {
        if blockfunc != nil{
            blockfunc("I am Amy")
        }
    }

对应的回调

  block.callBackFuncBlock { (res: String) in
         print(res);
   }
//打印结果:I am Amy

3️⃣有参数有返回值

   typealias paramBlock = (Int) -> String           //返回值类型是字符串

    func paramFuncBlock(blockfunc: paramBlock!) {
        if blockfunc != nil{
            let retFunc = blockfunc(5)
            print("Block\(retFunc)")
            
        }
    }

对应的回调

     block.paramFuncBlock { (res: Int) -> String in
            return "res: \(res)*50"
      }

4️⃣返回值是一个函数指针,入参为String

   typealias funcBlockB = (Int,Int) -> (String)->()

    func testBlockB(blockfunc: funcBlockB!) {
        if blockfunc != nil {
            let retFunc = blockfunc(9,10)
            retFunc("The Result is")
        }
    }

对应的回调

   block.testBlockB { (a: Int, b:Int) -> (String) -> () in
         func callBackFunc(res: String) {
             print("\(res) : \(a) + \(b) = \(a+b)")
         }
         return callBackFunc
   }
//打印结果:The Result is : 9 + 10 = 19

5️⃣返回值是一个函数指针,入参为String 返回值也是String

    typealias funcBlockC = (Int,Int) -> (String)->String
    func testBlockC(blockfunc: funcBlockC!) {
        if (blockfunc) != nil {
            let retfunc = blockfunc(9,10)
            let str = retfunc("The Result is")
            print("\(str)")
        }
  
    }

对应的回调

block.testBlockC { (a: Int, b: Int) -> (String) -> String in
     func sumFunc(res: String) -> String {
                let resNum = a + b
                return "\(res)  \(a) + \(b) = \(resNum)"
            }
            return sumFunc
  }
//打印结果: The Result is  9 + 10 = 19

以上🍓

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 导学习研究生导践行的力量导坚持的力量导选择的力量导修炼的美感(轻而易举的富足)导课程的智慧每一个都展开引导市场的核...
    每个人的孟母堂阅读 1,135评论 0 0
  • 今天是你的节日 我搜遍全身 我绞尽脑汁 我想在今天 给你个礼物 你原是浪漫的姑娘啊 然后成了少妇 再然后成了母亲 ...
    本无痕阅读 3,060评论 7 8
  • 【1028今日话题】 行动营的打卡时间为0:00-23:00,你计划每天在北京时间几点之前完成?如何保证按时(或者...
    捡到蜜罐的熊阅读 1,031评论 0 0

友情链接更多精彩内容