Swift3 迁移问题
Posted
技术标签:
【中文标题】Swift3 迁移问题【英文标题】:Swift3 Migration issues 【发布时间】:2016-12-27 06:41:26 【问题描述】:得到错误:
表达式类型 '[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
【问题讨论】:
【参考方案1】:这里的consAry
类型是[NSLayoutConstraint?]
表示它包含optional
类型为NSLayoutConstraint
的对象,并且使用for 循环您明确将其类型告诉NSLayoutConstraint
表示non-optional
,所以要么删除它并在里面循环解开可选值或在 consAry
上使用 flatMap
和 for 循环。
选项 1:使用 for 循环删除显式规范
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
选项 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
【讨论】:
最后一个代码出错-无法赋值:'i'是一个让常量 @ThripthiHaridas 删除该行现在不需要在循环的每次迭代中自动更改其值。也不需要声明删除行var i : Int = Int(0)
。以上是关于Swift3 迁移问题的主要内容,如果未能解决你的问题,请参考以下文章