我正在编写类似于 C# Abstract 类的 Objective C 类。我需要在抽象类实现中将 BOOL 变量分配给 TRUE。正如我在Objective C for Abstract 类中所知道的那样,不会有init 方法。那么如何将我的 BOOL 变量默认值更改为 TRUE?
C#类:
public abstract class ABC
{
private bool isNew = true;
}
我如何在 Objective C 中实现相同的功能?
我正在编写类似于 C# Abstract 类的 Objective C 类。我需要在抽象类实现中将 BOOL 变量分配给 TRUE。正如我在Objective C for Abstract 类中所知道的那样,不会有init 方法。那么如何将我的 BOOL 变量默认值更改为 TRUE?
C#类:
public abstract class ABC
{
private bool isNew = true;
}
我如何在 Objective C 中实现相同的功能?
首先,Objective-C 本身没有抽象类的概念,您只需创建一个您不打算为其创建实例的类。因此,编译器不会强制执行“抽象”性质(尽管如果确实需要,您可以选择在代码中强制执行它)。
所以“抽象”只是一个类,它可以有一个init
方法——这就是你需要为实例变量设置默认值的方法。
以下是如何拥有一个“抽象”类来初始化非零成员变量:
// 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
您必须实现 init 并将所有属性设置为您想要的值
或者
您可以实现返回默认值的 getter,只要它们没有设置