Swift:同时将元组解压为可变和不可变变量
我有一个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
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
(或类似变体)似乎不可能