2016-12-27 23 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を意味を意味しているので、それを削除し、ループ内の任意の値または使用をアンラップのいずれかループのためのflatMapconsAry

オプション1:consAry

の使用 flatMap

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

オプション3許可すれば使用してオプションラッピング:forループ

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

オプション2で明示的に指定を削除してください

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

注:ここではインデックス作成にiを使用しています。代わりに、enumerated() forループを使用してください。

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

最後のコード - の値に割り当てることができないためにエラーを取得:「i」は、ループの各反復自動的にその値が変化における必要はありません定数 –

+1

@ThripthiHaridasは今、その行を削除してみましょうです。また、 'var i:Int = Int(0)'行を削除する必要はありません。 –

+1

@Nirav D返信ありがとうございます。私の時間を救った –