2014-11-22 4 views
5

을 .last 사용하여 다차원 배열을 수정할 수 없습니다 내 코드 :다음은

var states:[[[Int]]] // I create an empty multidimensional array 
states = [[[0,0,0],[0,0,0],[0,0,0]]] // I give it a value 


// Why does here it doesn't work ? ('@ivalue $T11' is not identical to 'Int') 
states.last![0][0] = 1 

// And here it does ? 
states[0][0][0] = 1 

가 다른 하나에 하나의 경우 나에게 오류를 유발하지 왜을받지는 무엇입니까? 나는 그것이 똑같은 일을 할 것이라고 생각했다 ...

답변

4

last은 마지막 요소를 반환하지만 새로운 값을 설정할 수는 없다. 실제로 재산 만 get 구현합니다

/// The last element, or `nil` if the array is empty 
var last: T? { get } 

그래서 당신은 배열을 수정하는 데 사용할 수 없습니다.

반환되는 요소가 복합 값 유형 (예 : 배열 또는 사전과 같은 구조체) 인 경우 배열에 저장된 실제 요소의 사본이 반환됩니다. 따라서 last에 의해 반환 된 요소에 대한 변경이나 해당 속성 및 데이터의 변경은 원본 배열에 영향을주지 않고 해당 복사본에서만 수행됩니다.

+0

고맙습니다. :) –