Как передать (и установить) не-объекты косвенным путем? - PullRequest
1 голос
/ 01 сентября 2011

Объекты NSError часто используются следующим образом (взято из этого предыдущего вопроса ):

- (id)doStuff:(id)withAnotherObjc error:(NSError **)error;

Я хочу добиться чего-то подобного с косвенной ссылкой BOOL:

- (id)doStuff:(id)withAnotherObjc andExtraBoolResult:(BOOL **)extraBool;

Но я не могу понять, как заставить это работать правильно.

Для данной спецификации метода, включающей NSError, правильная реализация будет включать что-то вроде (снова из предыдущего вопроса ):

*error = [NSError errorWithDomain:...];

С подобной логикой кажется, что это должно работать с косвенной передачей BOOL:

*extraBool = &YES; // ERROR! Address expression must be an lvalue or a function designator

Почему это не работает и как правильно реализовать это?

1 Ответ

4 голосов
/ 01 сентября 2011

Имейте в виду, что с объектами вы работаете с указателем (например, NSError*), поэтому, используя этот метод, вы получите указатель на указатель (например, NSError**). При работе с BOOL вы должны использовать указатель на BOOL: только один уровень косвенности, а не два. Следовательно, вы имеете в виду:

- (id)doStuff:(id)withAnotherObjc andExtraBoolResult:(BOOL *)extraBool;

и впоследствии:

*extraBool = YES;
...