我正在编写类似于C#Abstract类的Objective C类。我需要在抽象类实现中将BOOL变量赋值为TRUE。正如我在Objective C中所知的Abstract类那样,不会有init方法。那么如何将BOOL变量默认值更改为TRUE?
C#Class:
public abstract class ABC
{
private bool isNew = true;
}
我如何在Objective C中实现相同的目标?
答案 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