У меня есть функция Swift, которая возвращает кортеж из двух значений. Первое значение обычно используется, но не всегда, как «обновленная» версия части изменяемого состояния в вызывающем (я знаю, что я мог бы использовать inout
для этого вместо кортежа, но это делает его более раздражающим сохранить прежнее состояние при сохранении нового). Второе значение представляет собой неизменяемое возвращаемое значение, созданное функцией, которая не предназначена для переопределения любого существующего изменяемого состояния.Swift: Распаковка кортежа в изменяемые и неизменные переменные одновременно
Концептуально, использование выглядит следующим образом:
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)
Как я должен идти о распаковке/уничтожение того этот кортеж?