获取错误:
表情类型' [NSLayoutConstraint?]'在没有更多背景的情况下是模棱两可的#34;
从Swift2.2迁移到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
}
答案 0 :(得分:2)
此处consAry
的类型为[NSLayoutConstraint?]
表示它包含optional
类型的NSLayoutConstraint
对象,并且对于for循环,您明确表示其类型为NSLayoutConstraint
表示non-optional
,因此请删除该内容并在循环内部解开可选值,或使用flatMap
上的consAry
for for循环。
选项1:使用for循环删除显式规范
for constraint in consAry {
if ((i > 2) && (screenHeight <= 568)){
padding = 10
}
constraint?.constant = padding
i = i + 1
}
选项2:使用if
进行可选换行for constraint in consAry {
if ((i > 2) && (screenHeight <= 568)){
padding = 10
}
if let currentConstraint = constraint {
currentConstraint.constant = padding
}
i = i + 1
}
选项3:在consAry上使用flatMap
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
}