Как уже говорилось ранее, намерение (inout) всегда должно работать.
Я предлагаю для намерения (в) и намерения (из) переменной X выполнить поиск (CTRL + F или любой другой) для "X =" и "X =" в вашей подпрограмме. Таким образом, вы сможете проверить, изменена ли переменная или нет во время выполнения этой подпрограммы. Если нет: намерение (в). Это всегда будет истинно, НО, если переменная изменяется в подфункции или при вызове другой подпрограммы. Поэтому прежде всего нужно проверить, выполняется ли вызов функции или подпрограммы в подпрограмме, которую вы переводите.