Как передать (и установить) не-объекты косвенным путем?

Объекты 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 ответ

Решение

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

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

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

*extraBool = YES;
Другие вопросы по тегам