先生,我正在使用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
}
}];
}
答案 0 :(得分:0)
你的块有一个普通的return语句(返回void),一个语句返回dict(返回一个NSDictionary *)。这是不允许的。
如果您已将块的返回类型定义为void,则第二个将给出错误。如果您已将块的返回类型定义为NSDictionary *,则第一个将给出错误。如果您已将块的返回类型定义为NSInteger,则两者都会出错。
您没有指定返回类型,而是将其留给编译器。在第一次“返回”之后,编译器认为“好,返回类型必须为空”,因此在第二次返回时会收到错误消息。
PS。正如trojanfoe所说,你需要弄清楚异步调用是如何工作的。您正在尝试做什么不能可能以这种方式工作。另一个PS:什么是quardinate?你来自德克萨斯州的“坐标”听起来像“quardinate”吗?