反转GMSMutablePath数组

时间:2017-07-26 14:26:58

标签: ios google-maps casting

根据文档GMSMutablePath是:

GMSMutablePath is a dynamic (resizable) array of CLLocationCoordinate2D. [Google Documentation]

https://developers.google.com/maps/documentation/ios-sdk/reference/interface_g_m_s_mutable_path

我想颠倒Path坐标的顺序。通常使用数组我会使用:

[[array123 reverseObjectEnumerator] allObjects];

但NSArray函数都不会对它起作用,如果我尝试将它强制转换为NSArray或NSMutableArray,我只会得到红旗。

如何反转GMSMutablePath中元素的顺序或如何将其正确地转换为NSArray?

2 个答案:

答案 0 :(得分:2)

GMSMutablePath不会继承自NSMutableArray,因此您无法将其转换为NSMutableArray。 你可以做什么手动做。如果我们想要使用NSMutableArray,我们可以调用exchangeObjectAtIndex:withObjectAtIndex:,但由于GMSMutablePath似乎没有为该方法提供等价物,我们可以更明确地做到这一点。

for (NSUInteger i1 = 0; i1 < [myPath count]/2; i1 ++)
{
   NSUInteger i2 =  [myPath count]-i1;
   CLLocationCoordinate2D *coord1 = [myPath coordinateAtIndex:i1];
   CLLocationCoordinate2D *coord2 = [myPath coordinateAtIndex:i2];
   [myPath replaceCoordinateAtIndex:i1 withCoordinate:coord2];
   [myPath replaceCoordinateAtIndex:i2 withCoordinate:coord1];
}

答案 1 :(得分:0)

这是代码,如果你想走一条路并以同样的方式回来。

lazy var path : GMSMutablePath = {
    if let path = GMSMutablePath(fromEncodedPath: self.encodedString) {
        let max = path.count()
        for i in 0..<max {
            let reversePos = max-i // reverte the path so you can go and come back the same way
            path.add(path.coordinate(at: reversePos))
        }
        return path
    }
    return GMSMutablePath()
}()