Getting error:
Expression type '[NSLayoutConstraint?]' is ambiguous without more context"
After migrating from Swift2.2 to 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
}
Here type of consAry
is [NSLayoutConstraint?]
means it contains optional
object of type NSLayoutConstraint
and with for loop you are explicitly saying its type to NSLayoutConstraint
means non-optional
, so either remove that and inside the loop unwrapped the optional value or use flatMap
on consAry
with for loop.
Option 1: Remove explicit specification with for loop
for constraint in consAry {
if ((i > 2) && (screenHeight <= 568)){
padding = 10
}
constraint?.constant = padding
i = i + 1
}
Option 2: Optional Wrapping using if let
for constraint in consAry {
if ((i > 2) && (screenHeight <= 568)){
padding = 10
}
if let currentConstraint = constraint {
currentConstraint.constant = padding
}
i = i + 1
}
Option 3: Use flatMap
on consAry
for constraint in consAry.flatMap ({ $0 }) {
if ((i > 2) && (screenHeight <= 568)){
padding = 10
}
constraint.constant = padding
i = i + 1
}
Note: You are using i
for indexing here, so instead of that use enumerated()
with for loop.
for (i, constraint) in consAry.flatMap ({ $0 }).enumerated() {
if ((i > 2) && (screenHeight <= 568)){
padding = 10
}
constraint.constant = padding
}