获取错误:
表达式类型'NSLayoutConstraint?‘是不明确的,没有更多的上下文“
从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
}发布于 2016-12-27 06:53:50
在这里,consAry类型是[NSLayoutConstraint?],意思是它包含类型为NSLayoutConstraint的optional对象,而对于for循环,您要显式地将其类型声明为NSLayoutConstraint意味着non-optional,所以要么删除该类型,然后在循环中展开可选值,要么在consAry上使用flatMap with for循环。
选项1:使用循环删除显式规范
for constraint in consAry {
if ((i > 2) && (screenHeight <= 568)){
padding = 10
}
constraint?.constant = padding
i = i + 1
}选项2:使用if let进行可选包装
for constraint in consAry {
if ((i > 2) && (screenHeight <= 568)){
padding = 10
}
if let currentConstraint = constraint {
currentConstraint.constant = padding
}
i = i + 1
}flatMap 选项3:在consAry上使用
for constraint in consAry.flatMap ({ $0 }) {
if ((i > 2) && (screenHeight <= 568)){
padding = 10
}
constraint.constant = padding
i = i + 1
}注意:这里使用i进行索引,所以不要使用enumerated() with for循环。
for (i, constraint) in consAry.flatMap ({ $0 }).enumerated() {
if ((i > 2) && (screenHeight <= 568)){
padding = 10
}
constraint.constant = padding
}https://stackoverflow.com/questions/41340258
复制相似问题