Это очень простой кусок кода, но я чувствую, что есть более элегантный способ сделать это:Есть ли лучший способ сделать это?
if timeOfLastUpdate == nil {
timeOfLastUpdate = currentTime
return
}
//"Infinitesimal" moment of time used to update the position of the orbiter
let dt:CFTimeInterval = currentTime - timeOfLastUpdate!
timeOfLastUpdate = currentTime
//Other code
Я чувствую, что там должен быть более элегантным способом сделать следующее с помощью дополнительной цепочки возможно , Мне не нравится тот факт, что
а) я проверяю, если значение равно нулю, вместо того, чтобы использовать какой-то необязательной СЦЕПЛЕНИЕ
б) Линия timeOfLastUpdate = currentTime
повторяется дважды.
Есть ли лучший способ сделать это? Что-то более похоже на Свифт?
есть причина timeOfLastUpdate начинается как ноль? Если вы можете удалить необходимость проверки nil, вам не нужно будет делать то, что вы считаете неэлегантным. Прямо сейчас, при первом вызове этого кода вы пропускаете время дельта, просто устанавливая timeOfLastUpdate, но не должно быть дельта-времени? Время дельта между тем, когда начинается ваш орбитальный аппарат, и когда это называется первым? –
@WillM. Ну, timeOfLastUpdate должен представлять время с момента последнего вызова функции «update». Если это первый раз, когда он вызывается, «timeOfLastUpdate» будет неопределенным, не так ли? Следовательно, ниль. Если ваше высказывание о том, что время дельты должно быть разницей между тем, когда орбитальный элемент добавлен в сцену и первым «обновлением», я не могу этого сделать, потому что орбитальный элемент добавлен в сцену редактором SKS, а не через мой код , –
Вам не нужен первый вызов функции обновления, чтобы что-то сделать? Как сделать первое обновление, основанное на том, что произошло между началом прогресса и первым вызовом для обновления. Прямо сейчас, вы просто отбрасываете то время, которого никогда не было. –