Это невозможно; результат hasGraph будет известен только во время выполнения, тогда как обязательные / необязательные части протокола используются компилятором для проверки чего-либо во время компиляции.
То, что вы, вероятно, хотите сделать, это добавить заметку о том, что если hasGraph возвращает YES, то должны быть реализованы xGraphValues и yGraphValues, что вносит небольшую неформальность в ваш официальный протокол. Вы всегда можете сделать что-то вроде:
if([object respondsToSelector:@selector(xGraphValues)] &&
[object respondsToSelector:@selector(yGraphValues)])
Чтобы проверить во время выполнения, реализует ли объект те части протокола, которые вам нужны, чтобы иметь возможность выполнять с ним определенную операцию. Вероятно, было бы разумно поместить эти вещи в NSAssert, если вы хотите, чтобы кто-то, кто реализует несовместимый объект, мог узнать, что они сделали неправильно, в отладочной сборке.