OC基础知识之Block&Swift闭包

2021-07-07  本文已影响0人  alfei13

记录一下一些想法:今天写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`是方法调用时、默认给外界生成的变量名称、
// 也可以省略、但是外界在调用时候、必须自己加上参数名称;
- (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 闭包表达式 作为函数参数
    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

上一篇 下一篇

猜你喜欢

热点阅读