2014-09-21 4 views
4

Swift로 놀고 있습니다. let을 for 루프로 선언 할 수있는 이유는 무엇입니까? 내가 아는 한, let은 상수를 의미하므로 혼란 스럽다.for in 루프를 입력하십시오.

func returnPossibleTips() -> [Int : Double] { 
     let possibleTipsInferred = [0.15, 0.18, 0.20] 
     //let possibleTipsExplicit:[Double] = [0.15, 0.18, 0.20] 

     var retval = Dictionary<Int, Double>() 
     for possibleTip in possibleTipsInferred { 
      let inPct = Int(possibleTip * 100) 
      retval[inPct] = calcTipWithTipPct(possibleTip) 
     } 

    return retval 

    } 
+1

는'let'은 일정한 기준으로 범위를 정의 - 귀하의 경우에 대한 루프에서. 기본적으로 "let"으로 선언 된 변수에 새 값을 할당하는 것은 불가능합니다. – Eugene

+1

'var'은'Mutable'으로 생각하고'let'은 상수 대신'Immutable'으로 생각하십시오. – barrett

답변

5

inPct 상수의 수명은 단지 그것이 블록이므로 루프 반복 동안된다 범위 :

for i in 1...5 { 
    let x = 5 
} 
println(x) // compile error - Use of unresolved identifier x 

매 반복 inPct에서 새로운 변수를 의미한다. 그들은 let로 선언 된 이후 당신은 어떤 반복에 inPct들 중 하나에 할당 할 수 없습니다 : 기본 즉

for i in 1...5 { 
    let x = 5 
    x = 6 // compile error 
} 
1

당신은 정의 할 때 : let possibleTipsInferred = [0.15, 0.18, 0.20]possibleTipsInferred읽기 전용 변수임을 의미한다. 반복 할 수는 있지만 변경할 수는 없습니다.

또한, 스위프트에 당신 수 없습니다 쓰기 : a이 값 nil을 가지고 있으며, 당신이 그것을 변경할 수 없습니다

let a:Int? 
a = 5  // compile ERROR 

때문이다. for..in 루프


, 각 반복은 i 재현 루프마다 새로운 인스턴스를 수신한다.

따라서 일정하게 만들고 let을 쓸 수 있습니다.

0

for 루프는 일련의 명령문을 실행하므로 루프 할 때마다 새로운 "범위"가됩니다. 이는 C가 루프를 처리하는 방법과 매우 유사합니다.

for 루프를 실행할 때마다 스택 상수가 해제되어 의 값을에 재 할당 할 수 있습니다.

for 루프 밖에서 변수를 미리 선언하고 해당 값을 지정하면 for 루프를 실행할 때마다 변수 값을 업데이트합니다.

여기 빠른에서 루프에 대한 문서에 대한 링크입니다 : Control Flow

관련 문제