Swift:同时将元组解压为可变和不可变变量

Swift:同时将元组解压为可变和不可变变量,swift,coding-style,tuples,mutability,destructuring,Swift,Coding Style,Tuples,Mutability,Destructuring,我有一个Swift函数,它返回两个值的元组。第一个值通常(但并非总是)用作调用者中一段可变状态的“更新”版本(我知道我也可以使用inout,而不是元组,但这使得在保留新状态的同时保留旧状态更烦人)。第二个值是由函数生成的一个通常不可变的返回值,它不打算覆盖任何现有的可变状态 从概念上讲,用法如下所示: var state = // initialize (state, retval1) = process(state) (state, retval2) = process(state) (sta

我有一个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)

我应该如何解包/解构这个元组?

我不相信有一种语法可以同时绑定
let
var

有趣的是,您可以在
开关中执行此操作:

let pair = (1,2)
switch pair {
case (var a, let b):
    ++a
default:
    break
}
但是
(var a,let b)=pair
(或类似变体)似乎不可能