2012-09-06 194 views
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; 
    } 
} 

然後我就可以使用靜態變量的狀態是這樣的:

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

有人能告訴我,我會怎麼做Objective-類似的東西C?

回答

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 
+0

我會感到非常不願意分配給定這種情況下,每個失敗的新對象。 ..編輯:或者我誤解了什麼? – MechEthan

+0

是的,我修正了這個問題。但我真的只是使用枚舉,如果你不需要任何額外的函數@ user1143970 – DrummerB

+0

@DrummerB:你可能想要'_success'和'_failure'作爲它們各自的方法。 – mipadi