当块文字具有未指定的显式返回类型时,返回类型'NSDictionary *'必须与先前的返回类型'void'匹配

时间:2016-05-12 09:41:45

标签: ios methods nsdictionary google-places-api

先生,我正在使用google place Autocomplete,我正在寻找我在代码下面使用的地方的坐标,但我在返回声明时发现错误 -

finalarray中有5个地方的名字和地名ID

-(NSDictionary * ) checkArr
{
    NSLog(@"%@",finalarray);

    NSDictionary *dict = [finalarray objectAtIndex:0];
    NSString *placeID = [dict objectForKey:@"place_ID"];

    NSDictionary * dict1 = [self getquardinate:placeID];

    return dict1;
}

我在返回字典时在return语句中发现了上述错误

- (NSDictionary * )getquardinate:(NSString*)placeID{
  [_placesClient lookUpPlaceID:placeID callback:^(GMSPlace *place, NSError *error) {

  if (error != nil) {
      NSLog(@"Place Details error %@", [error localizedDescription]);

      return ;
  }

  if (place != nil) {

      NSNumber *lat = [NSNumber numberWithDouble:place.coordinate.latitude];
      NSNumber *lon = [NSNumber numberWithDouble:place.coordinate.longitude];
      NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:lat, @"latitude",lon, @"longitude", nil];

      return dict; // above error in this line
  }
 }];
}

1 个答案:

答案 0 :(得分:0)

你的块有一个普通的return语句(返回void),一个语句返回dict(返回一个NSDictionary *)。这是不允许的。

如果您已将块的返回类型定义为void,则第二个将给出错误。如果您已将块的返回类型定义为NSDictionary *,则第一个将给出错误。如果您已将块的返回类型定义为NSInteger,则两者都会出错。

您没有指定返回类型,而是将其留给编译器。在第一次“返回”之后,编译器认为“好,返回类型必须为空”,因此在第二次返回时会收到错误消息。

PS。正如trojanfoe所说,你需要弄清楚异步调用是如何工作的。您正在尝试做什么不能可能以这种方式工作。另一个PS:什么是quardinate?你来自德克萨斯州的“坐标”听起来像“quardinate”吗?