问题描述
我正在尝试创建一个函数来计算每个给定坐标的 90 度和 270 度坐标..
并保存在一个arrayLocationOffset数组中
var arrayLocations : [CLLocationCoordinate2D] =
[
CLLocationCoordinate2D(latitude: 45.15055543976834,longitude: 11.656891939801518 ),CLLocationCoordinate2D(latitude: 45.154446871287924,longitude: 11.66058789179949),]
// simplify only 2 coordinate
我使用这个 for 循环来执行操作:
func createCoordinatepoly() {
let polypoint = arrayLocations.count
for i in 0..<polypoint {
let coord = arrayLocations[i]
// calc LH
let lhCoord = coord270(coord: coord)
arrayLocationOffset.append(lhCoord)
}
for i in 0..<polypoint { // shuld revers this for loop and get first the last index
let coord = arrayLocations[i]
// calc LH
let RhCoord = coord90(coord: coord)
arrayLocationOffset.append(RhCoord)
}
debugPrint("aggiunto array poly \(arrayLocationOffset.count)")
}
arrayLocationOffset 必须具有特定的序列,否则我无法在 Mapkit 中正确绘制多边形。 为了获得第二个 forLoop(我计算 RHside 的位置)的特定顺序,我应该从最后一个数组索引开始计算回到第一个...
这可能吗?
谢谢
解决方法
顾名思义,您只需使用 reversed()
即可反转数组。
你的代码相当objective-c-ish。枚举数组的更好方法是快速枚举,因为您实际上不需要索引。
for coord in arrayLocations { ...
和
for coord in arrayLocations.reversed() { ...
然而,还有一种更快捷的方法map
ping 数组
func createCoordinatePoly() {
arrayLocationOffset.append(contentsOf: arrayLocations.map{coord270(coord: $0)})
arrayLocationOffset.append(contentsOf: arrayLocations.reversed().map{coord90(coord: $0)})
debugPrint("aggiunto array poly \(arrayLocationOffset.count)")
}
,
已解决:
var reversIndex = polypoint-1
for _ in 0..<polypoint {
let coord = arrayLocations[reversIndex]
// calc LH
let RhCoord = coord90(coord: coord)
arrayLocationOffset.append(RhCoord)
reversIndex -= 1
}
我使用反向索引从末尾开始...