As of today, You don't need to use external classes, just make your markers "draggable"
GMSMarker *myMarker = [[GMSMarker alloc] ...];
...
[myMarker setDraggable: YES];
// Use some kind of data to identify each marker, marker does not have 'tag' but 'userData' that is an 'id' type
[myMarker setUserData: markerId];
And implement the respective delegate
@interface YourController: UIViewController<GMSMapViewDelegate> ...
Set your delegate
GMSMapView *myMapView = [[GMSMapView alloc] ...];
...
myMapView.delegate = self;
Then you can handle each marker event, ie:
-(void)mapView:(GMSMapView *)mapView didEndDraggingMarker:(GMSMarker *)marker{
if ([marker.userData isEqualtoString:@"xMark"])
NSLog(@"marker dragged to location: %f,%f", marker.position.latitude, marker.position.longitude);
}