美文网首页
OC基础知识之Block&Swift闭包

OC基础知识之Block&Swift闭包

作者: alfei13 | 来源:发表于2021-07-07 11:06 被阅读0次

记录一下一些想法:今天写swift和oc互相调用时的代码,些许心得,有不足之处还请各位大佬批评指正,不胜感激!!!

一、OC中Block的使用

1.1 block 作为函数参数
- `有参数的block`
- 函数本身如果想把自身的东西传给外界调用者
- 就需要以block参数的形式传递给外界
// 想把内部的东西回调给外界:(用的是block的参数、而非返回值)
- (void)animalWithName:(void(^)(int))name {
    NSLog(@"zhe shi yi ge block !");
    !name ?: name(1);
}
    // 用的是里面回传出来的参数、不是返回值;
    [mao animalWithName:^(int idx) {
        NSLog(@"mao = %d", idx);
    }];
  • 声明时候的细节
    • 如果声明时候带有(int idx) ,调用的时候会自动带上idx
    • 但是在实现中、idx不会带上(因为在实现中idx没有作用)
// (int idx)这里`idx`是方法调用时、默认给外界生成的变量名称、
// 也可以省略、但是外界在调用时候、必须自己加上参数名称;
- (void)animalWithName:(void(^)(int idx))name;
1.2 有返回值的block 作为函数参数
- `有返回值的block`
- ` ^ 后面 没有小括号`,代表block有返回值
- 
//  这里 ^ 后面 `没有小括号`,
    [mao animalWithName:^int {
        return 10;
    }];
1.3 有返回值有参数的block 作为函数参数
- `有返回值的block`
- ` ^ 后面 紧跟的是block的返回值,`小括号里`,代表block传出来的参数
//  这里 ^ 后面 `没有小括号`,
   [mao animalWithName:^int(int idx) {
        return 10;
    }];

二、swift中闭包的使用

2.1 闭包表达式
  • 用闭包表达式声明一个函数
    var fn = {
        // 参数列表 -> 返回值类型  in
        // 函数体代码
        (v1: Int, v2: Int) -> Int in
        return v1 + v2
    }

  • 外界在使用的时候
fn(1, 2)
  • 用闭包表达式定义的函数,调用的时候不需要加参数标签;
2.2 闭包表达式 作为函数参数
  • 这里闭包表达式作为函数的参数
  • 有两个参数,并且有int类型返回值
    func sum(fn: (Int, Int) -> Int) {
        // 接收block从外界传回来的值,并打印
        print(fn(1, 2))
    }
  • 外界在使用的时候
 -  这里相当于从`函数内部传出来2个参数`,在sum的block中做计算,
 -  然后将返回值回传给sum函数的block
 sum() {
      (v1: Int, v2: Int) -> Int
     in return v1 + v2
  }
  • 尾随闭包
  • 如果将很长的闭包表达式作为函数的最后一个实参,使用尾随闭包语法可以增强函数的可读性;
  • 这里尾随闭包:指的是在函数掉用的时候,声明的时候是没有这种说法的
  • 尾随闭包是一个被书写在函数调用括号外面(后面)的闭包表达式

2.3 其余闭包的相关内容参见:
闭包 https://www.jianshu.com/p/042490a85c89

相关文章

  • 托XX福写个Swift闭包教程

    闭包基础知识 Swift闭包和OC的block类似不过还是有点区别 OC的block是一个匿名函数 Swift 中...

  • iOS&Swift&OC 闭包和Block的相互转化

    一、Swift的闭包 -> OC的block 二、OC的block -> Swift的闭包

  • Gradle开发-Groovy闭包

    # 闭包 闭包的基础知识 闭包的使用 闭包 this,owner,delegate 的理解 总结 ## 闭包的基础...

  • Swift 之闭包

    闭包 闭包类似于 OC 的 block,但是比 OC 的 block 应用面更广 在 OC 中 block 是匿名...

  • Swift学习-闭包&& 懒加载&&am

    闭包 闭包的介绍 闭包和OC中的block非常相似OC中的block是匿名的函数Swift中的闭包是一个特殊的函数...

  • 14-Swift中的闭包

    闭包的介绍 闭包和OC中的Block非常相似(通俗点说:你也可以这么理解,Swift的闭包就是OC中的Block)...

  • Swift入门二(对象函数)

    函数 闭包 GCD 尾随闭包 闭包循环引用解决(OC) 闭包循环引用解决(swift推荐) 面向对象 命名空间: ...

  • iOS&Swift&OC 闭包和Block的相互转化

    一、Swift的闭包 -> OC的block 二、OC的block -> Swift的闭包 文章部分内容借鉴链接:...

  • Swift中的闭包简单梳理

    闭包的介绍 闭包和OC中的block非常相似 OC中的block是匿名函数 Swift中的闭包是一个特殊函数 bl...

  • swift学习之闭包

    闭包的介绍 闭包和OC中的block非常相似 OC中的block是匿名的函数 Swift中的闭包是一个特殊的函数 ...

网友评论

      本文标题:OC基础知识之Block&Swift闭包

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