【问题标题】:Access static class variables in Objective-C在 Objective-C 中访问静态类变量
【发布时间】:2020-01-06 07:07:47
【问题描述】:

我想在类之外使用类变量。

“外部”是指我实例化类的主函数。

@interface Class: NSObject
static int var_class;   // Class variable
{
    int var_object; // Object variable
}
@end

@implementation Class
@end

为了访问对象变量var_object,我们使用:

int main(void)
{
    Class *object = [Class new];

    // Access to the variable
    object->var_object;
    (*object).var_object;

    return 0;
}

我以为我可以以同样的方式访问类变量var_class。

但他们都没有工作。 (无法编译)

Class.var_class;
// -> Generates error: could not find setter/getter for 'count' in class 'TheClass'

Class->var_class;
// -> Generates error: error: expected '.' before '->' token

如何获取/设置类变量的值?

声明一个函数是访问类变量的方式,但我希望它更简单。

@interface Class: NSObject
static int var_class;   // Class variable
+(int) get;
+(void) set: (int) val;
@end

@implementation Class
+(int) get
{
    return var_class;
}
+(int) set: (int) val
{
    var_class = val;
}
@end

【问题讨论】:

    标签: objective-c


    【解决方案1】:

    Objective-C 中没有静态类变量,因此你不能期望像Class.var_class 这样的东西。这就是为什么你的最后一个命题是正确的并且被普遍采用的原因。见,Does Objective-C support class variables?。

    ----编辑----

    Objective-C 添加了一些新结构,请参阅Objective-C Class Properties。因此语法是被承认的,但没有自动合成。

    【讨论】:

    • 实际上Class.var_class 语法可以使用@property(class, ...) 并且在技术上即使没有它,但不能仅访问变量本身的类属性。
    • @Kamil.S 太好了,即使在 Swift 尝试替换它之后,我也不知道 Objective-C 还在进化!谢谢。
    • 所以我必须创建一个函数或使用一个属性来代替。谢谢你们!
    猜你喜欢
    • 2010-10-19
    • 2011-08-27
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    相关资源
    最近更新 更多