8

像这样在 C# 中声明的静态变量:

private const string Host = "http://80dfgf7c22634nbbfb82339d46.cloudapp.net/";
private const string ServiceEndPoint = "DownloadService.svc/";
private const string ServiceBaseUrl = Host + ServiceEndPoint;
public static readonly string RegisteredCourse = ServiceBaseUrl + "RegisteredCourses";
public static readonly string AvailableCourses = ServiceBaseUrl + "Courses";
public static readonly string Register = ServiceBaseUrl + "Register?course={0}";

如何在另一个类中调用这个静态变量?

4

3 回答 3

12

答:使用static关键字。

语法:( 根据Abizernstatic ClassName *const variableName = nil;的评论更新[已添加const]


更新原因(根据“Till”的评论)static在函数/方法中的变量上使用时,即使该变量的范围已离开,也会保留其状态。当在任何函数/方法之外使用时,它将使该变量对其他源文件不可见 - 只有在任何函数/方法之外使用时,它才会在该实现文件中可见。因此,constwithstatic可以帮助编译器相应地对其进行优化。

如果您需要更多关于constwith使用的解释static,我在这里找到了一个漂亮的链接:const static


利用:

您可能已经在 tableview 的委托中看到了“静态”关键字的使用- cellForRowAtIndexPath:

static NSString *CellIdentifier = @"reuseStaticIdentifier";

于 2013-06-06T06:48:41.170 回答
5
static NSString *aString = @""; // Editable from within .m file
NSString * const kAddressKey = @"address"; // Constant, visible within .m file

// in header file
extern NSString * const kAddressKey; // Public constant. Use this for e.g. dictionary keys.

据我所知,公共静态不是 Objective-C 的内置特性。您可以通过创建一个返回静态变量的公共类方法来解决此问题:

//.h
+ (NSString *)stringVariable;

//.m
static NSString * aString;
+ (NSString *)stringVariable
{
    return aString;
}

大多数静态对象无法在编译时初始化(我认为实际上只有字符串)。如果您需要初始化它们,您可以在+ (void)initialize方法中这样做,只要第一次引用该类,就会延迟调用该方法。

static UIFont *globalFont;
+ (void)initialize
{
    // Prevent duplicate initialize http://www.mikeash.com/pyblog/friday-qa-2009-05-22-objective-c-class-loading-and-initialization.html
    if (self == [ClassName class]) {
        globalFont = [UIFont systemFontOfSize:12];
    }
}
于 2013-06-06T07:00:15.237 回答
2

Objective C 是 C/C++ 的超集,所以对于静态它遵循 C++/C 约定,你应该可以使用它

static <<datatype>> <<variableName>> = initialization

希望您会尝试这种方式,是否有任何错误,如果有,请在您的问题中添加更多清晰度

如果那是NSString使用以下的情况,

static NSString *pString = @"InitialValue";

如果您必须在代码中进行修改NSString,请确保它必须是NSMutableString.

希望这有帮助...

于 2013-06-06T06:50:33.237 回答