2012-09-06 193 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