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

时间:2015-01-31 09:29:31

标签: swift coding-style tuples mutability destructuring

我有一个Swift函数,它返回两个值的元组。第一个值通常(但不总是)被用作调用者中一段可变状态的“更新”版本(我知道我也可以使用inout来代替元组,但是在保留新状态的同时保持旧状态更加烦人。第二个值是函数产生的通常不可变的返回值,它不打算覆盖任何现有的可变状态。

从概念上讲,用法如下:

var state = // initialize
(state, retval1) = process(state)
(state, retval2) = process(state)
(state, retval3) = process(state)

显然,这里的问题是retval1retval2retval3从未被声明,编译器会生气。

state必须是var且不得重新声明,因此我无法撰写

let (state, retval) = process(state)

但是,retval永远不会被修改,因为最佳做法和良好的编码风格,应该使用let进行声明。

我希望以下语法可能有效,但它没有:

(state, let retval) = process(state)

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

1 个答案:

答案 0 :(得分:1)

我不相信有同时绑定letvar的语法。

有趣的是,你可以在switch

中完成
let pair = (1,2)
switch pair {
case (var a, let b):
    ++a
default:
    break
}

(var a, let b) = pair(或类似变体)似乎不可能。