Swift代码同一函数中常量出现‘未解析标识符’错误求助
为什么同一函数内if分支定义的变量在else分支无法访问?
我编写了如下代码,出现错误“Use of unresolved identifier 'randomcell'”。randomcell明明在同一函数的if分支中已定义,为何else分支无法识别它?我曾尝试在else分支内重新定义它,但会选中另一个单元格,我希望在函数的第二部分引用同一个随机元素。
if seconds == 5 { let randomcell = viewArray.randomElement() randomcell?.backgroundColor = UIColor.red } else { randomcell?.backgroundColor = UIColor.systemYellow }
这是变量作用域的问题啦!你在if分支里用let定义的randomcell,它的作用域只限于这个if代码块内部——简单说就是大括号包裹的区域,出了这个范围,外部(包括else分支)就找不到这个变量了。
要解决这个问题,你需要把randomcell的定义移到if-else结构的外面,让两个分支都能访问到它。因为randomElement()返回的是可选值,我们可以先定义一个可选变量,然后在if分支里给它赋值,这样else分支就能复用同一个实例了:
// 先在if-else外部定义可选变量,让两个分支都能访问 var randomcell: UIView? if seconds == 5 { randomcell = viewArray.randomElement() randomcell?.backgroundColor = UIColor.red } else { // 这里使用的就是if分支里赋值的那个randomcell实例 randomcell?.backgroundColor = UIColor.systemYellow }
另外补充个小细节:如果seconds !=5的时候randomcell还没被赋值(比如第一次进入函数时seconds就不是5),那randomcell?.backgroundColor这行代码不会执行任何操作,因为可选值是nil。如果你的业务逻辑需要确保else分支里randomcell一定有值,可能还要额外处理这种空值情况哦!
内容的提问来源于stack exchange,提问作者JAC
相关产品推荐
相关产品推荐

