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;
}

 

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

©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页