Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 块作为C函数的参数或返回值_Objective C_C - Fatal编程技术网

Objective c 块作为C函数的参数或返回值

Objective c 块作为C函数的参数或返回值,objective-c,c,Objective C,C,我在一个类上有这样一个属性: @property (nonatomic, strong) void (^ifSuccess)(MyClass *myObject); 现在我需要在C函数中执行此操作: if (self.ifSuccess) { self.ifSuccess(value); } 但这不起作用,因为在C函数中,我没有对self的引用。所以我需要将块作为参数传递给C函数。大概是这样的: void myFunction(myClass *object, XXX) { } X

我在一个类上有这样一个属性:

@property (nonatomic, strong) void (^ifSuccess)(MyClass *myObject);
现在我需要在C函数中执行此操作:

if (self.ifSuccess) {
   self.ifSuccess(value);
}
但这不起作用,因为在C函数中,我没有对self的引用。所以我需要将块作为参数传递给C函数。大概是这样的:

void myFunction(myClass *object, XXX) {

}
XXX可能在哪里

void(^ifSuccess)()
使函数

void myFunction(myClass *object, void(^ifSuccess)()) {

}
请确认这是否正确。

问题是我无法在调用myFunction时传递self.ifSuccess

这行不通

myFunction(object, self.ifSuccess);
因此,我需要一种读取self.ifSuccess块并将其传递给函数的方法

怎么做

注意:是的,这需要在C中

*一:-*是的,您可以在C方法中传递对self的引用

*第二:-*声明目标c块在语法上可能令人望而生畏,所以我喜欢有点系统化

我会的

typedef void (^ifSuccess)(MyClass *myObject);
现在我将宣布财产为

@property (nonatomic, strong) ifSuccess mySuccessBlock;
你的功能变成了

void myFunction(myClass *object,ifSuccess blockParameter) {

}

我不知道足够的obj-C来回答你所有的问题,但是语法
void(^ifSuccess)(
是无效的C。扬抑符,
^
,在这种情况下是没有意义的。blocks通常喜欢扬抑符…在简单的“C”中?在普通的“C”中有“块”?@Eric:是的。Blocks是C的扩展,而不是Objective-C@amar是的,也称为“Lambda表达式”:)我知道它们在C++11中,但没有意识到它们存在于苹果的扩展中!谢谢好的,但是Xcode不允许在调用myFunction(对象,self.ifSuccess)时使用self.ifSuccess;如果success是块类型,则变量为mySuccessBlock,即如果success是NSArray,mySuccessBlock是数组变量。do self.mySuccessBlock好吧,我说的不是这个函数。Xcode不允许我使用self.ifSuccess作为参数调用myFunction。@RubberDuck 1。Xcode与此无关。2.现在还不清楚您是从哪里得到这个错误的——在调用C函数时还是在它的实现中?@ruberduck复制块(非原子,复制)。