2017-03-28 9 views
1

유형이 변형 함수가있는 구조체 인 객체의 배열이 있습니다.Swift for var list.enumerated()

for (index, object) in objects.enumerated() { 
    otherArray[index] = object.someMutatingFunction(...) 
} 

이 날은 내가 var에 추가하여 해결할 수 있습니다이 오류 Cannot use mutating member on immutable value of type 'Blabla'에 이르게 : 그래서 나는이 코드를 가지고

for var (index, object) in objects.enumerated() { 
    otherArray[index] = object.someMutatingFunction(...) 
} 

을하지만 그때 내가 모르는 또 다른 경고 Variable 'index' was never mutated; consider changing to 'let' constant를 얻을 수를 방법 우아하게 고쳐라. 유일한 아이디어는 새로운 var 변수를 추가하는 것입니다. 이 경고를 막기 위해 내가 할 수있는 일이 있습니까?

+1

'enumerated()'는 메소드가 아니라 속성입니다. – Hamish

+0

당신 말이 맞아요. 죄송합니다. –

답변

2

접두사 var 키워드로 object 변수 : 해미는 array의 요소가 수정되지 않습니다이 답변에 코멘트에서 지적 하듯

struct S { 
    mutating func f() { } 
} 

let array = [S(), S()] 

for (index, var object) in array.enumerated() { 
    object.f() 
} 

참고. for 루프 범위 내에있는 object의 로컬 복사본 만 수정할 수 있습니다.

array을 수정하려면 for 루프의 범위를 벗어난 var을 선언 한 다음 array 개의 인덱스를 할당해야합니다.

+0

실제로 OP가 변형 된 요소를 원래 배열이 아닌 다른 배열 'otherArray'에 할당하려고하므로 내 주석을 삭제했습니다. – Hamish

+0

'mutating '측면이'array'의 요소를 수정하는 것을 매우 쉽게 잘못 해석 할 수 있기 때문에 여러분이 지적한 바는 여전히 정확하다고 생각합니다. – par