【问题标题】:Swift: Unpacking a tuple into mutable and immutable variables simultaneouslySwift:同时将元组解包为可变和不可变变量
【发布时间】:2015-01-31 09:29:31
【问题描述】:

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

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

【问题讨论】:

    标签: swift coding-style tuples mutability destructuring


    【解决方案1】:

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

    有趣的是,您可以在switch

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

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

    【讨论】:

      猜你喜欢
      • 2020-10-22
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 2020-11-04
      • 2018-02-16
      • 2011-11-24
      • 2012-04-03
      相关资源
      最近更新 更多