Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
objective-C中的静态变量_Objective C - Fatal编程技术网

objective-C中的静态变量

objective-C中的静态变量,objective-c,Objective C,我已经搜索了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"); privat

我已经搜索了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;
}
然后我可以在状态中使用静态变量,如下所示:

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中执行类似的操作吗?

大多数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

在这种情况下,我非常不愿意为每次失败分配一个新对象。。。编辑:还是我误解了什么?是的,我修正了。但如果不需要任何附加函数,我真的只需要使用枚举@user1143970@DrummerB:您可能也希望将
\u success
\u failure
范围限定到它们各自的方法。这是一个简单的情况,但如果您有其他类型需要将枚举转换为文本字符串,必须创建单独的转换函数才能将枚举转换为字符串。我在Java中经常使用这种模式,而且效果很好。在Objective-c中,有没有其他方法可以在使用或不使用枚举的情况下实现这一点?