exi*_*all 5 coding-style tuples destructuring mutability swift
我有一个 Swift 函数,它返回两个值的元组。第一个值通常(但并非总是)用作调用者中一段可变状态的“更新”版本(我知道我也可以使用inout
它而不是元组,但这使得它更烦人保留旧状态的同时保留新状态)。第二个值是函数生成的通常不可变的返回值,其无意覆盖任何现有的可变状态。
从概念上讲,用法如下:
var state = // initialize
(state, retval1) = process(state)
(state, retval2) = process(state)
(state, retval3) = process(state)
Run Code Online (Sandbox Code Playgroud)
显然,这里的问题是retval1
、retval2
、 和retval3
从未被声明,编译器会生气。
state
必须是 avar
并且不能重新声明,所以我不能写
let (state, retval) = process(state)
Run Code Online (Sandbox Code Playgroud)
但是,retval
永远不会被修改,并且应该let
作为最佳实践和良好编码风格的问题来声明。
我希望以下语法可能有效,但事实并非如此:
(state, let retval) = process(state)
Run Code Online (Sandbox Code Playgroud)
我应该如何解压/解构这个元组?
let
我不相信\xe2\x80\x99t 存在\xe2\x80\x99s 与和同时绑定的语法var
。
有趣的是,您可以在以下位置执行此操作switch
:
let pair = (1,2)\nswitch pair {\ncase (var a, let b):\n ++a\ndefault:\n break\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n但是(var a, let b) = pair
(或类似的变体) don\xe2\x80\x99t 似乎是可能的。
归档时间: |
|
查看次数: |
4682 次 |
最近记录: |