如何定义可以在应用程序中的任何位置访问的全局变量? [重复]

|                                                                                                                   这个问题已经在这里有了答案:                                                      
已邀请:
如果您的应用程序中有多个视图,并且在这种情况下,您希望每个视图都可以访问一个变量,则应始终创建一个Model / Data类并在其中定义变量。像这样的东西: 目标-C:
//DataClass.h      
@interface DataClass : NSObject {    

    NSString *str;
}

@property(nonatomic,retain)NSString *str;    
+(DataClass*)getInstance;    
@end  


//DataClass.m    
@implementation DataClass    
@synthesize str;

static DataClass *instance = nil;

+(DataClass *)getInstance
{    
    @synchronized(self)    
    {    
        if(instance==nil)    
        {    
            instance= [DataClass new];    
        }    
    }    
    return instance;    
}    
现在,在您的视图控制器中,您需要将该方法调用为:
DataClass *obj=[DataClass getInstance];  
obj.str= @\"I am Global variable\";  
每个视图控制器都可以访问此变量。您只需要创建一个Data类的实例。 斯威夫特:
class DataClass {

    private var str: String!

    class var sharedManager: DataClass {
        struct Static {
            static let instance = DataClass()
        }
        return Static.instance
    }
}
用法:
DataClass.sharedManager.str
使用
dispatch_once
class DataClass {

    private var str: String!

    class var sharedInstance: DataClass {
        struct Static {
            static var onceToken: dispatch_once_t = 0
            static var instance: DataClass? = nil
        }
        dispatch_once(&Static.onceToken) {
            Static.instance = DataClass()
        }
        return Static.instance!
    }
}  
用法:
DataClass.sharedManager.str
    
Objective-C不直接支持“类变量”。相反,您可以创建一个对类文件的范围有效的变量,并使用类方法进行访问。
// outside the implementation
static int score = 0; // static means it is only accessible from the current file

@implementation Game

+ (int)score {
    return score;
}
+ (void)setScore:(int)newScore {
    score = newScore;
}
    
在iOS项目中实现全局变量(尽管不是真正的全局变量)的首选方法是在应用程序委托中创建一个属性,然后从每个类中访问该属性。 编辑:重新阅读您的问题,似乎我误解了您的问题,而ughoavgfhw的答案可能正是您要寻找的。他是正确的,在Objective-C中没有类变量之类的东西,因此您必须创建一个常规的C静态变量,然后创建用于设置和获取的类方法(用
+
而不是
-
表示)。 虽然通常,当我在应用程序中需要\“ global \”变量时,我会创建单例类来容纳它们及其相关方法(这样,应用程序委托不会因不相关的属性而溢出),或者它是一个较小的项目我只使用应用程序委托(这也是一个单例类),而不是单独的单例。尽管静态变量加类的setter / getter方法可以更好地满足您的需求,但这没什么问题。     

要回复问题请先登录注册