我想定义一个包含任何用户名的常量文件路径(例如/Users/username/Desktop
...在我的特定情况下,它是我在/var/spool/FolderICreate/username
创建的目录。
声明此常量的最佳方法是什么,以便我的其他类可以识别它?我目前有一个globals.h文件,包含需要查看全局变量的类,但我不知道如何设置值。 #define
显然需要一个硬编码的字符串文字,我不确定我是否可以或如何使用extern const NSString*
设置字符串。我觉得这应该不难,但我不知所措。
- 编辑 -
正如人们正确指出的那样,我的代码是不必要的,因为我可以使用NSUserName
等获取用户名,所以我删除了它。但我认为人们忽略了我的问题。我可以看到有多种方法可以获取我想要的路径名 - 如何将其声明为常量?
答案 0 :(得分:3)
对于你修改过的问题,正如凯琳所说,你不想要一个常数。 C中的常量是在编译时定义的,并且您不知道编译时该值是什么。
您不希望出现此问题的变量。你想要一个静态函数。基金会提供许多可以做与您想要的相似的事情。如果您想要其他内容,请创建自己的静态函数MYDirectoryForStuff()
。
不要创建非常量全局变量。那种方式就是疯狂。然后,您必须验证它们在使用之前已初始化,这会导致各种微妙的错误。如果使用静态函数,则可以轻松进行自我初始化。
答案 1 :(得分:2)
在重新实现Foundation框架中已经提供的一系列功能之前,请先查看NSPathUtilities。你可以找到一些特别针对你想要做的方法。
要回答你实际问过的问题,没有简单的方法可以将变量声明为常量,然后在运行时更改其值...这种方法无法告诉编译器它是常量。只需将头文件中的变量声明为extern NSString *
,并仅将其设置一次。 : - )
答案 2 :(得分:2)
您永远不应该假设用户的主文件夹可能位于何处。
检索当前用户主文件夹路径的正确方法是
NSHomeDirectory()
如果您想访问用户主文件夹的其中一个标准子文件夹,请不要对其位置做任何假设,但请使用
NSSearchPathForDirectoriesInDomain()
检索它们。例如,要获取文档文件夹:
NSArray *searchPaths = NSSearchPathForDirectoriesInDomain(
NSDocumentDirectory,
NSUserDomainMask,
YES
);
NSLog(@"The documents folder is at %@", [searchPaths objectAtIndex:0]);
答案 3 :(得分:0)
Foundation框架具有以下功能:NSUserName()
。