如何在Objective-C中将BOOL变量作为参数传递?

时间:2015-11-13 20:56:38

标签: ios objective-c boolean

这可能是一个愚蠢的问题,但在我的应用程序中,需要将bool变量传递给方法。

假设我有10个BOOL变量声明为b1,b2.....b10

我只需使用以下代码即可将BOOL值作为参数发送:

[self sendBoolValue:YES];      

- (void)sendBoolValue:(BOOL)value 
{
    b1 = value;
    // now b1 will be YES.
}

现在我需要的是做到这一点:

[self sendBoolVariable:b1];  // I tried sending &b1, but it didnt work out. 

- (void)sendBoolVariable:(BOOL)value
{
    value = YES; // trying to set b1 to YES.
    // b1 is still NO.
}

我无法发送BOOL变量。这甚至可能吗?

为什么我这样做?:

我有一个UIView,它有3个3x3网格布局的子视图(我称之为图块)。

我有两个BOOLstartTileendTile。我需要根据触摸来设置这些值!!!

我正在使用touches-Began/Moved/Ended来检测这些视图的触摸

当触摸开始时,我需要计算触摸是否在tile1或tile2 .....中

所以实际代码:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// calculate touch point and based on it set the bool value
    [self sendBoolVariable:startTile];
  //startTile is selected, so change its color
  // lock other tiles    

}


-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{

  //if touches came to tile 2 region
  [self sendBoolVariable:b2];   //b2 is BOOL variable for tile2 



}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self sendBoolVariable:endTile]; 

    //end tile is selcted too
     //at this point both start tile and tile are selected
     //now do the animation for the start tile and end tile
     //other tiles are still in locked state

}

如您所见,我需要调用相同的方法但需要发送三个不同的bool变量!!!!

3 个答案:

答案 0 :(得分:5)

不是100%确定这是否是您想要的,但您可以这样做:

[self sendBoolVariable:&b1];

- (void)sendBoolVariable:(BOOL *)value {
    *value = YES; //b1 is now YES        
}

答案 1 :(得分:0)

在您的澄清之后,如何:

if(context.activeView){
    removeAnimationClasses(context.activeView, fadeOnly);
    context.child.classList.add('slideInLeft');
}

BOOL只是一个签名的字符。 如果您尝试更改属性的值,请尝试self.variable = YES或_variable = YES

对于以下内容,我还要感谢barry wark

从objc.h中的定义:

BOOL a = YES;
a = [self modifyBoolValueBasedOnItself:a]; // the method takes the BOOL as a parameter and returns the modified value 

答案 2 :(得分:0)

将BOOL b1传递给方法时:

[self sendBoolVariable:b1];

“value”的范围仅限于该方法。所以当你设置value = YES:

-(void)sendBoolVariable:(BOOL) value{
         value=YES;

您没有更改范围更广的值ivar“b1”。