У меня есть функция Swift, которая возвращает кортеж из двух значений. Первое значение обычно, но не всегда, используется как «обновленная» версия части изменяемого состояния в вызывающем объекте (я знаю, что мог бы также использовать для этого inout
вместо кортежа, но это делает его более раздражающим сохранить старое состояние при сохранении нового). Второе значение — обычно неизменное возвращаемое значение, создаваемое функцией, которое не предназначено для переопределения любого существующего изменяемого состояния.
Концептуально использование выглядит так:
var state = // initialize
(state, retval1) = process(state)
(state, retval2) = process(state)
(state, retval3) = process(state)
Проблема здесь, очевидно, в том, что retval1
, retval2
и retval3
никогда не объявляются, и компилятор злится.
state
должно быть var
и не должно быть переобъявлено, поэтому я не могу писать
let (state, retval) = process(state)
Однако retval
никогда не изменяется и должно быть объявлено с let
в соответствии с рекомендациями и хорошим стилем кодирования.
Я надеялся, что следующий синтаксис может работать, но это не так:
(state, let retval) = process(state)
Как мне распаковать/разрушить этот кортеж?