2012-06-03 3 views
0

Итак, я пытаюсь есть метод, который эффективно делает это:Условное значение (например, в то время как цикл) в качестве параметра метода

- (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()?

+0

Это, вероятно, не общее решение, но необходимость повторной оценки в вашем последнем примере говорит «блокирует» меня. –

+0

Да, это определенно способ, которым я мог бы это взять. Не думал об этом, и это определенно отличный ответ. –

+0

@PhillipMills Я думаю, что я собираюсь пойти с блоками. Отправьте ответ, и я соглашусь? –

ответ

0

Как отмечено в комментариях, передача блока является универсальным способом получения желаемого результата, хотя более простые методы могут быть подходящими для тестовых случаев, когда не требуется полностью динамическая оценка.

Смежные вопросы