2016-12-27 2 views
1

얻기 오류를 발행합니다.Swift3 마이그레이션

let consAry = [emailBottom,pwrdBottom] 

    var i : Int = Int(0) 
    for constraint: NSLayoutConstraint in consAry { 
     if ((i > 2) && (screenHeight <= 568)){ 
      padding = 10 
     } 
     constraint.constant = padding 
     i = i + 1 

    } 

답변

2

여기 consAry의 유형은 [NSLayoutConstraint?]이 유형 NSLayoutConstraintoptional 객체를 포함하고 루프 명시 적 NSLayoutConstraint에 유형을 말과 non-optional을 의미합니다 의미입니다, 그래서를 제거하고 루프 내부의 옵션 값 또는 사용을 풀어 하나 for 루프를 사용하여 을 consAry에 지정하십시오.

옵션 1 :

for constraint in consAry { 
    if ((i > 2) && (screenHeight <= 568)){ 
     padding = 10 
    } 
    constraint?.constant = padding   
    i = i + 1 
} 

는 옵션 2 루프와 명시 적 사양을 제거하여 선택적 포장이 할 수있는 경우를

for constraint in consAry { 
    if ((i > 2) && (screenHeight <= 568)){ 
     padding = 10 
    } 
    if let currentConstraint = constraint { 
     currentConstraint.constant = padding 
    } 
    i = i + 1 
} 

옵션 3 : flatMap consAry에

for constraint in consAry.flatMap ({ $0 }) { 
    if ((i > 2) && (screenHeight <= 568)){ 
     padding = 10 
    } 
    constraint.constant = padding 
    i = i + 1 
} 

참고 : 여기서 색인 생성에 i을 사용하고 있으므로 대신 for 루프와 함께 enumerated()을 사용하십시오.

for (i, constraint) in consAry.flatMap ({ $0 }).enumerated() { 
    if ((i > 2) && (screenHeight <= 568)){ 
     padding = 10 
    } 
    constraint.constant = padding 
} 
+0

값을 할당 할 수있는 마지막 코드 -에 대한 오류가 '내가'는 상수 –

+1

@ThripthiHaridas가 줄을 제거 할 수 있습니다 자동으로 루프 값의 변화의 각 반복에서 필요가 없습니다. 또한 행'var i : Int = Int (0)'을 선언 할 필요가 없습니다. –

+1

@Nirav D 답장을 보내 주셔서 감사합니다. 내 시간을 저장 했어. –