在Objective C中实现抽象类时,将BOOL的默认值设置为TRUE

时间:2013-10-21 07:12:12

标签: ios objective-c

我正在编写类似于C#Abstract类的Objective C类。我需要在抽象类实现中将BOOL变量赋值为TRUE。正如我在Objective C中所知的Abstract类那样,不会有init方法。那么如何将BOOL变量默认值更改为TRUE?

C#Class:

public abstract class ABC
{
      private bool isNew = true;
}

我如何在Objective C中实现相同的目标?

3 个答案:

答案 0 :(得分:4)

首先,Objective-C没有抽象类的概念,你只需要创建一个你不打算创建实例的类。因此编译器不强制执行“抽象”本质(尽管如果确实需要,您可以选择在代码中强制执行它)。

所以“抽象”只是一个类,它可以有一个init方法 - 这就是你需要为实例变量设置默认值。

答案 1 :(得分:3)

以下是如何使用“抽象”类来初始化非零成员变量:

// ABC is an abstract class--not to be instantiated directly, but subclassed

@interface ABC : NSObject
@property ( nonatomic ) BOOL isNew ;
@end

@implementation ABC
-(id)init
{
    self = [ super init ] ;

    if ( [ [ self class ] isEqual:[ ABC class ] ] )
    {
        @throw [ NSException exceptionWithName:NSGenericException reason:@"Warning: class ABC must be subclassed. Cannot directly create instances of class ABC" userInfo:nil ] ;
        return nil ;
    }

    self.isNew = YES ;

    return self ;
}

@end

你的子类看起来像这样:

@interface MyConcreteABCSubclass : ABC
@end

@implementation MyConcreteABCSubclass

-(id)init
{
    self = [ super init ] ;
    if ( self )
    {
        // initialize subclass vars
    }
    return self ;
}

//
// ... your subclass methods go here ...
//

@end

答案 2 :(得分:1)

你必须实现init并将所有属性设置为你想要的值

OR

只要没有设置

,就可以实现返回默认值的getter