Как передать (и установить) не-объекты косвенным путем?
Объекты 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;