OC坑集: block作为函数参数

强力推荐-不要错过,万一能帮助到自己呢?

推荐一个网站,关于人工智能教程,教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点 这里 可以跳转到教程。


对于 OC 的争论一直不休, 对于一门语言,  我觉得只要能解决你的问题就够了.

评论一门编程语言之前, 你需要真正的去用它,  OC 孰好孰坏, 需要你自己去尝试.

OC 坑集, 主要记载使用 OC 开发项目遇到的问题, 尽量简洁明了, 希望大家喜欢.

 

block 语句块可以作为函数的参数, 在项目中都经常被作为回调来使用.

如果你还不熟悉 block 语法, 请自行 google.

这里不讲 block 语法.

 

创建一个 OC 类

#import <Foundation/Foundation.h>

@interface FoolBar : NSObject

- (void)makeFool:(void(^)(NSString *))callback;

@end


实现如下

#import "FoolBar.h"

@implementation FoolBar

- (void)makeFool:(void (^)(NSString *))callback
{
    NSLog(@"makeFool | callback.");
    callback(@"This is a block parameter.");
}

@end

 

在 main.m 里面调用

 

#import <Foundation/Foundation.h>
#import "FoolBar.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        FoolBar *fb = [[FoolBar alloc] init];
        [fb makeFool:^(NSString *) {
            
        }];
    }
    return 0;
}


大家看到这里,应该觉得没什么问题.

 

我刚开始也是行事冲冲的,但是编译器给了 Error, 意思是参数丢失.

经过一番挣扎, 终于解决了问题.

在声明带有 block 语句的方法时, 需要带上参数名称或者调用者自己写上参数名称.

 

- (void)makeFool:(void(^)(NSString *param))callback;


重新调用

 

 

#import <Foundation/Foundation.h>
#import "FoolBar.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        FoolBar *fb = [[FoolBar alloc] init];
        [fb makeFool:^(NSString *param) {
            NSLog(@"param = %@", param);
        }];
    }
    return 0;
}


使用 block 作为函数参数的时候,建议使用 typedef 定义 block.

 

 

typedef void (^OnFoolCallback)(NSString *name);


定义和实现

 

 

- (void)productFool:(OnFoolCallback)callback;

 

- (void)productFool:(OnFoolCallback)callback
{
    NSLog(@"productFool | callback.");
    callback(@"This is a block parameter: mark.");
}


测试和使用

#import <Foundation/Foundation.h>
#import "FoolBar.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        FoolBar *fb = [[FoolBar alloc] init];
        [fb makeFool:^(NSString *param) {
            NSLog(@"param = %@", param);
        }];
        
        [fb productFool:^(NSString *name) {
            NSLog(@"name = %@", name);
        }];
    }
    
    return 0;
}

 

~~ 没有谁比谁更聪明,只有谁比谁更努力。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值