Как перебирать функцию каждый раз, изменяя значение предоставленных параметров - PullRequest
0 голосов
/ 23 июня 2019

Привет, поэтому у меня есть класс Calculations с рядом функций, одной из которых является keplerianElementsToEcef.В моем контроллере представления я жестко кодирую значения параметров и затем вызываю функцию.Однако позже в отдельном классе у меня есть bool isInRange.Если мой космический корабль находится вне зоны действия клетки, я возвращаю false и строку, а также.Я также хочу затем перебрать функцию keplerianElementsToEcef, каждый раз увеличивая параметр timeOfCalculation на две минуты, пока в какой-то момент времени в будущем спутник не окажется в диапазоне.

Я пытался просто вызвать функциюно увеличьте значение, используемое изначально как время, текущее время, на две минуты.Другие переменные rangeMeanMotion и т. Д. Такие же, как те, которые жестко заданы в контроллере представления

var isInRange: Bool
var rangeString: String
if distance < range {
    isInRange = true
    rangeString = "In Range"
} else {
    isInRange = false
    rangeString = "Not In Range"
    while isInRange == false {

        var dateString = dateFormatter.date(from: calculationTime!)!
        var updatedDate = dateString.addingTimeInterval(TimeInterval(5.0 * 60.0))
        var updateDateAsString = dateFormatter.string(from: updatedDate)

        Calculations.shared.keplerianElementsToECEF(meanMotion: rangeMeanMotion, eccentricity: rangeEccentricity, Inclination: rangeInclination, LongitudeAscendingNode: rangeLongitudeAscendingNode, argumentPerigee: rangeArgumentPerigee, M0: rangeM0, epoch: rangeEpoch, date: updateDateAsString) {
      }
   } 
}

В параметрах функции под датой: updateDateAsString Я получаю следующую ошибку: дополнительный аргумент 'date' в вызове

Ответы [ 2 ]

0 голосов
/ 23 июня 2019

Я решил эту проблему.Я сделал оператор итерацией в течение определенного периода времени (1 день), и мой код выглядит так:

    else {
    isInRange = false
    rangeString = "Not In Range"
    print(calculationTime)

    if let calcTime = calculationTime {
            let parsedDate = dateFormatter.date(from: calcTime) ?? Date()
            for interval in stride(from: 0, to: 1440, by: 2) {
                var updatedDate = parsedDate.addingTimeInterval(TimeInterval(interval * 60))
                var updateDateAsString = dateFormatter.string(from: updatedDate)

                Calculations.shared.keplerianElementsToECEF(meanMotion: rangeMeanMotion, eccentricity: rangeEccentricity, Inclination: rangeInclination, LongitudeAscendingNode: rangeLongitudeAscendingNode, argumentPerigee: rangeArgumentPerigee, M0: rangeM0, epoch: rangeEpoch, date: updateDateAsString)

                let xDistance = ecefX - wgs84X
                let yDistance = ecefY - wgs84Y
                let zDistance = ecefZ - wgs84Z

                let iteratedDistance = sqrt(xDistance*xDistance + yDistance*yDistance + zDistance*zDistance)
                if iteratedDistance < 7000 {
                    nextVisible = updateDateAsString
                    break

                }
            }
        }
      }
0 голосов
/ 23 июня 2019
    var timeOfCalculation : TimeInterval = 0

func doItUntilSpacecraftIsInRange(){
    repeat {
        timeOfCalculation += TimeInterval(2.0 * 60.0)
        Calculations.shared.keplerianElementsToECEF(meanMotion: rangeMeanMotion, eccentricity: rangeEccentricity, Inclination: rangeInclination, LongitudeAscendingNode: rangeLongitudeAscendingNode, argumentPerigee: rangeArgumentPerigee, M0: rangeM0, epoch: rangeEpoch, date: updateDateAsString)

    }  while spacecraft.isInRange == false
}

doItUntilSpacecraftIsInRange()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...