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复制块(非原子,复制)。