Swift3迁移问题

时间:2016-12-27 06:41:26

标签: swift swift3 nslayoutconstraint

获取错误:

  

表情类型' [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

    }

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
}