我正在开发一个Cocoa应用程序,我使用常量nsstring作为存储我的首选项的键名的方式。

我知道这是一个好主意,因为它允许在必要时轻松更改密钥。 此外,这是整个“将数据与逻辑分离”的概念。

不管怎样,有没有一种好方法让这些常量在整个应用程序中定义一次?

我相信有一种简单而聪明的方法,但现在我的类只是重新定义它们所使用的方法。


当前回答

正如Abizer所说,您可以将其放入PCH文件中。另一种不那么脏的方法是为所有键创建一个包含文件,然后将其包含在您使用键的文件中,或者将其包含在PCH中。在它们自己的包含文件中,至少给了您一个查找和定义所有这些常量的地方。

其他回答

尝试使用类方法:

+(NSString*)theMainTitle
{
    return @"Hello World";
}

我有时会用。

如果你想调用nsstring。newline;从objective c,你想要它是静态常量,你可以在swift中创建这样的东西:

public extension NSString {
    @objc public static let newLine = "\n"
}

这样你就有了很好的可读的常量定义,并且可以从你选择的类型中获得,同时还可以绑定到类型的上下文。

正如Abizer所说,您可以将其放入PCH文件中。另一种不那么脏的方法是为所有键创建一个包含文件,然后将其包含在您使用键的文件中,或者将其包含在PCH中。在它们自己的包含文件中,至少给了您一个查找和定义所有这些常量的地方。

还有一件事要提一下。如果你需要一个非全局常量,你应该使用static关键字。

例子

// In your *.m file
static NSString * const kNSStringConst = @"const value";

因为static关键字,这个const在文件外部是不可见的。


@QuinnTaylor的小修正:静态变量在编译单元中是可见的。通常,这是一个单独的.m文件(如本例所示),但是如果你在包含在其他地方的头文件中声明它,它会咬你一口,因为编译后你会得到链接器错误

如果你想要全局常数;一种快速但肮脏的方法是将常量声明放入PCH文件中。