2015-11-13 5 views
0

Это может быть глупый вопрос, но в моем приложении будет необходимо передать переменную bool методу.Как передать переменную BOOL в качестве параметра в Objective-C?

Предположим, что у меня есть 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, который имеет 9 подвидов (я называю их как плитка) в компоновке 3x3 сетки.

У меня есть два значения BOOLstartTile и endTile. Мне нужно установить эти значения на основе касания !!!

Я использую 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 !!!!

+1

Почему вы пытаетесь использовать s-метод, чтобы просто установить BOOL-переменную в YES или NO? – rmaddy

+0

есть случай, когда я часто изменяю значения bool от b1 до b10. Поэтому я написал метод, который выполняет некоторые изменения на основе значений b1 ... b10. Он содержит статут переключения, который имеет 10 случаев. Каждый случай, выполняющий работу, касается касания CGPOINT !!!! Мне нужно вызвать тот же метод в разных точках с разными переменными !!! –

+0

поэтому вместо того, чтобы иметь несколько методов, я помещаю один метод, и я хочу передать переменные этому методу. –

ответ

4

Не 100% уверен, что это то, что вы хотите, но вы можете сделать:

[self sendBoolVariable:&b1]; 

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

да, это именно то, что мне нужно !!! –

+0

@ Mr.T Это был мой первоначальный комментарий ниже вопроса. Зачем вам нужен метод? Этот код можно заменить на 'b1 = YES;'. – rmaddy

+0

вы правы maddy, код можно заменить b1 = YES !!! Но в какой-то момент мне нужно иметь b2 = YES, ad в какой-то момент мне нужно иметь b3 = YES, и в какой-то момент мне нужно иметь b4 = YES !!!!! Поэтому мне нужно отправить переменную этому методу и сделать ее ДА! Остальные строки кода должны оставаться такими же !!!! :) @rmaddy –

0

После ваших разъяснений, как насчет:

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

BOOL просто подписанный символ. Если вы пытаетесь изменить значение свойства, попробуйте self.variable = YES или _variable = YES

Также Престижность barry wark для следующих действий:

Из определения в objc.h:

typedef signed char  BOOL; 
// BOOL is explicitly signed so @encode(BOOL) == "c" rather than "C" 
// even if -funsigned-char is used. 
#define OBJC_BOOL_DEFINED 
#define YES    (BOOL)1 
#define NO    (BOOL)0 
0

Когда вы передаете BOOL b1 к методу:

[self sendBoolVariable:b1]; 

"value" имеет объем, ограниченный этим методом. Поэтому, когда вы установите значение = YES:

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

вы не меняете значение более широкий охват Ивар «b1».

Смежные вопросы