Условное значение (например, цикл while) в качестве параметра метода
Итак, я пытаюсь найти метод, который эффективно делает это:
- (void)doWhile: (/*some magical type*/)condition
{
while (condition)
{
// do some magical things
}
}
И хотя ваше первое предложение может быть BOOL
рассмотреть следующие исключения:
[someObject doWhile: someOtherObject];
// yes, I know that I could just do (someOtherObject != nil), but
// I should be able to just use (someOtherObject), right?
// seeing as how ifs/fors/whiles can use just the object.
[someObject doWhile: [someOtherObject isValid]];
// since -isValid returns a BOOL, this will work, but it will only
// pass the value of -isValid at the time of calling to the while loop.
// if the value of -isValid changes, -doWhile: will have no idea of the change,
// whereas while() would.
Использование примитива _Bool
позволяет мне решить первую проблему, однако последняя проблема все еще сохраняется. Есть ли способ оценить достоверность параметра, не зависящего от типа, идентично тому, как while()
работает?
1 ответ
Решение
Как отмечено в комментариях, передача блока является универсальным способом получения желаемого результата, даже если более простые методы могут быть подходящими для тестовых случаев, когда полностью динамическая оценка не требуется.