#swift #xcode #coordinates #mapkit
#swift #xcode #координаты #mapkit
Вопрос:
Я пытаюсь создать функцию, которая должна вычислять координату в 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) Я должен начать вычислять от последнего индекса массива обратно к первому…
возможно ли это?
Спасибо
Ответ №1:
Как следует из названия, вы можете обратить массив только с reversed()
помощью .
Ваш код довольно похож на objective-c. Лучшим способом перечисления массива является быстрое перечисление, потому что вам на самом деле не нужен индекс.
for coord in arrayLocations { ...
и
for coord in arrayLocations.reversed() { ...
Однако есть еще более быстрый способ map
проверки массивов
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)")
}
Ответ №2:
решаемая:
var reversIndex = polypoint-1
for _ in 0..<polypoint {
let coord = arrayLocations[reversIndex]
// calc LH
let RhCoord = coord90(coord: coord)
arrayLocationOffset.append(RhCoord)
reversIndex -= 1
}
Я использую обратный индекс, чтобы начать с конца…
Комментарии:
1. Почему не просто
for i in (0..<polypoint).reversed()
?