Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 需要打字_Objective C_Ios - Fatal编程技术网

Objective c 需要打字

Objective c 需要打字,objective-c,ios,Objective C,Ios,我有一个带有初始值设定项的类,它使用NSDictionary: -(id)initWithVector:(NSDictionary *) vectorDictionary; 当我试图传递NSDictionary时,它会给我一个错误: 不兼容的点类型将“VectorClass*\u strong”发送到参数 键入“NSDictionary*” 代码: 如果我输入NSDictionary*vector,没有警告 vector应该是一个字典,为什么我会得到警告?您对两个不同的变量使用相同的名称。最内

我有一个带有初始值设定项的类,它使用NSDictionary:

-(id)initWithVector:(NSDictionary *) vectorDictionary;
当我试图传递NSDictionary时,它会给我一个错误:

不兼容的点类型将“VectorClass*\u strong”发送到参数 键入“NSDictionary*”

代码:

如果我输入NSDictionary*vector,没有警告


vector应该是一个字典,为什么我会得到警告?

您对两个不同的变量使用相同的名称。最内部的变量是在同一行中定义的VectorClass类型,因此编译器尝试将其传递给init方法,而不是更改其名称:

VectorClass *vectorC = [[VectorClass alloc] initWithVector:vector];
[vectorC retrieveVectorAttributeTable];
[vectorC retrieveVectorMetadataTable];

有趣的是,你认为对两个完全不同的变量使用相同的名称是个好主意。你不应该为此感到愚蠢。大多数程序员在这个阶段或其他阶段都会犯这个错误。正如@Till所评论的,您应该避免使用相同的变量名,这会让其他程序员和您自己感到困惑,并且可能导致错误行为,而不是编译时错误。
VectorClass *vectorC = [[VectorClass alloc] initWithVector:vector];
[vectorC retrieveVectorAttributeTable];
[vectorC retrieveVectorMetadataTable];