需要进行类型转换

Pad*_*215 0 objective-c ios

我有一个带有初始化程序的类,它接受一个NSDictionary:

-(id)initWithVector:(NSDictionary *) vectorDictionary;
Run Code Online (Sandbox Code Playgroud)

当我试图传递一个NSDictionary时,它给了我一个错误:

将'VectorClass*_strong'发送到参数类型'NSDictionary*'的不兼容的点类型

码:

// myVectorList is an array of dictionaries
for (NSDictionary *vector in self.myFielder.myVectorList)
{
    if ([vector isKindOfClass:[NSDictionary class]])
    {
        // hardcoded for testing purposes 
        if ([[vector objectForKey:HANDLE] isEqualToString:@"pt07p48u17aj75qx8n2fri9jlkrc262yt8"])
        {
            // GET THE WARNING ON PASSING "VECTOR"
            VectorClass *vector = [[VectorClass alloc] initWithVector:vector];

            [vector retrieveVectorAttributeTable];
            [vector retrieveVectorMetadataTable];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我转换(NSDictionary*)矢量,没有警告.

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

MBy*_*ByD 7

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

VectorClass *vectorC = [[VectorClass alloc] initWithVector:vector];
[vectorC retrieveVectorAttributeTable];
[vectorC retrieveVectorMetadataTable];
Run Code Online (Sandbox Code Playgroud)

  • 你不应该为此感到愚蠢.大多数程序员在这个阶段或其他阶段都会犯这个错误.正如@Till评论的那样,你应该避免使用相同的变量名,它会令人困惑(对于其他程序员和你自己)和危险(它可能最终导致错误的行为而不是编译时错误). (2认同)