So, I'm attempting to have a method that effectively does this:

- (void)doWhile: (/*some magical type*/)condition
{
    while (condition)
    {
        // do some magical things
    }
}

And while your first suggestion might be a BOOL consider the following exceptions:

[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.

The use of the primitive _Bool allows me to solve the former problem, however the latter problem still persists. Is there some way to evaluate the truthfulness of a type-agnostic parameter identically to how while() works?

有帮助吗?

解决方案

As noted in comments, passing a block is a versatile way of getting the desired result even though simpler methods may be appropriate for the test cases where a completely dynamic evaluation isn't required.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top