gpt4 book ai didi

ios - 使用不同类型的 int 和缺少类型说明符的 NSArray 重新定义

转载 作者:行者123 更新时间:2023-11-28 19:57:17 25 4
gpt4 key购买 nike

以下代码将不会生成并提供“缺少类型说明符,默认为‘int’”的警告和错误“使用不同类型重新定义‘my_var’:‘int’与‘NS Array *__strong’”。

NSArray *my_var = nil;
my_var = @[
@[@312, @"Name1"],
@[@313, @"Name2"]
];

我错过了什么?我尝试了许多不同的重构,但由于某种原因无法使用预定义的 NSArray 进行编译。

最佳答案

您已将该代码放在全局或文件范围内,在任何函数或方法定义之外。你不能那样做。对 my_var 的第二个赋值仅在函数或方法体内有效。在函数/方法主体之外,编译器认为第二行是另一个变量声明,(默认)类型为 int

您不能将 my_var 静态初始化为 NSArray 文字。 NSArray 文字不同于文字 NSString。一个文字 NSString 由编译器创建并存储在可执行文件中,完全可用。 NSArray 字面量转换为在运行时(在幕后)调用方法以创建数组的代码。该代码只允许在函数或方法体内使用。

如果你想要一个全局常量NSArray,使用一个创建数组一次并每次返回它的全局函数。在 .h 文件中声明它,如下所示:

NSArray *my_var();

然后在 .m 文件中这样定义它:

NSArray *my_var() {
static dispatch_once_t once;
static NSArray *array;
dispatch_once(&once, ^{
array = @[
@[@312, @"Name1"],
@[@313, @"Name2"]
];
});
return array;
}

关于ios - 使用不同类型的 int 和缺少类型说明符的 NSArray 重新定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25731933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com