2015-01-31 4 views
2

두 개의 튜플을 반환하는 Swift 함수가 있습니다. 첫 번째 값은 대개는 아니지만 일반적으로 호출자에서 변경 가능한 상태의 조각의 "업데이트 된"버전으로 사용됩니다 (이 튜플 대신 inout을 사용할 수도 있지만 더 귀찮습니다). 새 상태를 유지하면서 이전 상태 유지). 두 번째 값은 함수에 의해 생성되는 일반적으로 불변의 반환 값이며 기존의 변경 가능한 상태를 무효화하지 않습니다. 여기스위프트 : 튜플을 변경 가능하고 변경할 수없는 변수로 동시에 풀기

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

문제는, 분명히, retval1, retval2retval3가 선언되지 않습니다 것을, 그리고 컴파일러는 화를 가져옵니다

은 개념적으로, 사용은 다음과 같습니다.

statevar해야하며 다시 선언해서는 안된다, 그래서

let (state, retval) = process(state) 

그러나, retval이 수정되지 않습니다 쓸 수 및 모범 사례와 좋은 코딩 스타일의 문제로 let로 선언되어야한다 .

나는 다음과 같은 구문이 작동하지 않을 수 있습니다 기대했다,하지만하지 않습니다

(state, let retval) = process(state) 

어떻게이 튜플을 destructuring/풀고 가야 하는가?

답변

1

나는 letvar을 동시에 바인딩하는 구문이 있다고 생각하지 않습니다.

흥미롭게도, 당신은 switch에서 작업을 수행 할 수 있습니다

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

그러나 (var a, let b) = pair (또는 이와 유사한 변종이) 가능하지 않는 것.

관련 문제