0

我的问题可能很容易回答。我有一个自定义编写的指定初始化程序,它包含一个 BOOL 参数。

在其中,我想检查是否通过了 BOOL 或其他内容。如果有别的,我想提出一个例外。

我还想覆盖默认初始化并将其指向我指定的初始化程序而不是调用 super,并在其中传递一个 nil,以便用户在不使用指定的初始化程序时获得正确的异常。

-(id)init
{
  return [self initWithFlag:nil];
} 


-(id)initWithFlag:(BOOL)flag
{
    //get the super self bla bla

    if (flag IS-NOT-A-BOOL)
    {
        //raising exception here
    }
    //store the flag

    return self;
}

应该用什么代替 IS-NOT-A-BOOL?

4

1 回答 1

0

目标 c 中的 BOOL 可以导致“是”或“否”,并且所有内容都将被转换为这些值之一。使用包含布尔值的NSNumber怎么样?喜欢:

 -(id)initWithFlag:(NSNumber *)flag
{
    //get the super self bla bla

    if (!flag) // Check whether not nil
    {
        //raising exception here
        [NSException raise:@"You must pass a flag" format:@"flag is invalid"];
    }
    //store the flag
    BOOL flagValue = [flag boolValue];

    return self;
}

在这种情况下,您可以像这样调用该方法

[self initWithFlag:@YES]; // or @NO, anyway, it won't throw an exception

或这个

[self initWithFlag:nil]; // it will throw an exception
于 2013-05-01T14:10:01.237 回答