0

Objective-C の静的変数に関する投稿を検索しましたが、この質問に対する答えが見つかりませんでした。

Java では、次のように、同じクラス型の静的変数を持つクラスを作成できます。

public class Status {

    public static final Status SUCCESS = new Status(0, "Success");
    public static final Status FAILURE = new Status(-1, "It's Broke");

    private int number;
    private String message;

    private Status(int number, String message) {
        this.number = number;
        this.message = message;
    }
}

そして、次のように Status で静的変数を使用できます。

public Status foo() {
    ...
    return Status.FAILURE;
}

Objective-Cで同様のことを行う方法を誰か教えてもらえますか?

4

1 に答える 1

1

ほとんどの Cocoa API は、単純な列挙型を使用してそのような結果を返します。

typedef enum {
    MyClassResultSuccess = 0,
    MyClassResultFailure = -1
} MyClassResult;

投稿したものにより似たアプローチを使用する場合は、クラス メソッドを使用できます。

@interface Status
@property (nonatomic) int value;
@property (nonatomic, copy) NSString *message;
- (id)initWithValue:(int)value message:(NSString *)message;
+ (Status *)success;
+ (Status *)failure;
@end

@implementation Status

static Status *_success = nil;
static Status *_failure = nil;

- (id)initWithValue:(int)value message:(NSString *)message {
    self = [super init];
    if (self) {
        self.value = value;
        self.message = message;
    }
    return self;
}

+ (Status *)success {
    if (!_success)
        _success = [[Status alloc] initWithValue:0 message:@"Success"];
    return _success;
}

+ (Status *)failure {
     if (!_failure)
        _failure = [[Status alloc] initWithValue:-1 message:@"Failure"];
    return _failure;
}

@end
于 2012-09-06T16:24:56.413 に答える