我有一个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)
我该如何解开/解构这个元组?
答案 0 :(得分:1)
我不相信有同时绑定let
和var
的语法。
有趣的是,你可以在switch
:
let pair = (1,2)
switch pair {
case (var a, let b):
++a
default:
break
}
但(var a, let b) = pair
(或类似变体)似乎不可能。