gpt4 book ai didi

objective-c - 调用指定返回类型和参数的内联 block

转载 作者:可可西里 更新时间:2023-11-01 17:02:22 24 4
gpt4 key购买 nike

我决定尝试在 Objective-C 中使用 block 来控制流程,但在调用多个内联 block 时遇到了一些问题。

我有一个 OOBoolean,它是 BOOL 原语的包装器,并提供以下方法:

+ (id) booleanWithBool: (BOOL) boolPrimitive;

- (id) initWithBool: (BOOL) boolPrimitive;

- (void) ifTrueDo: (void (^) ()) trueBlock
ifFalseDo: (void (^) ()) falseBlock;

- (void) ifTrueDo: (void (^) ()) trueBlock;

- (void) ifFalseDo: (void (^) ()) falseBlock;

我可以像这样使用这个类:

OOBoolean* condition = [OOBoolean booleanWithBool: (1 + 1 == 2)];

id trueBlock = ^(){
NSLog(@"True.");
};

id falseBlock = ^(){
NSLog(@"False.");
};

[condition ifTrueDo: trueBlock ifFalseDo: falseBlock];

我得到的结果是“True.”。但是我在尝试这样做时不断收到语法错误:

OOBoolean* condition = [OOBoolean booleanWithBool: (1 + 1 == 2)];

[condition ifTrueDo:(void (^)()) {
NSLog(@"True");
} ifFalseDo:(void (^)()) {
NSLog(@"False");
}];

是否可以匿名定义多个 block 并将它们传递给采用多个 block 参数的方法?如果是这样,那有点令人失望。

最佳答案

这是可能的。

你的括号太多了。试试这个:

[条件 ifTrueDo:^() { NSLog(@"True"); }
ifFalseDo:^() { NSLog(@"False"); }
];

编辑:您的 block 语法稍微不正确。

如果你想包含返回类型和参数,你应该使用更接近于此的东西:

[self ifTrueDo:^ void (void) { NSLog(@"True"); }
ifFalseDo:^ void (void) { NSLog(@"False"); }
];

英语:

^ [返回类型] ([参数列表]) {[ block 内容]}

关于objective-c - 调用指定返回类型和参数的内联 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7274528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com