if let variable - 使用未解析的标识符
Posted
技术标签:
【中文标题】if let variable - 使用未解析的标识符【英文标题】:if let variable - Use of unresolved identifier 【发布时间】:2015-07-03 11:17:51 【问题描述】:我正在使用 SwiftyJSON 调用一些 API 并获取一些数据。 当我使用时:
if let variable = json["response"]["fieldname"]
else
println("error")
我稍后无法使用该变量,例如将值附加到数组。 例如:
if let variable1 = json["response"]["fieldname1"]
else
println("error")
if let variable2 = json["response"]["fieldname2"]
else
println("error")
var currentRecord = structure(variable1, variable2) ---> This line returns an error (use of unresolved identifier variable1) as not able to find variable1 or variable2
myArray.append(currentRecord)
我该如何解决这个问题?
【问题讨论】:
【参考方案1】:if let
的范围在紧随其后的括号内:
if let jo = joseph
// Here, jo is in scope
else
// Here, not in scope
// also not in scope
// So, any code I have here that relies on jo will not work
在 Swift 2 中,添加了一个新语句 guard
,它似乎具有您想要的那种行为:
guard let jo = joseph else // do something here
// jo is in scope
但是,如果您被困在 Swift 1 中,那么您可以轻松地解开这些变量而不用陷入厄运金字塔:
if let variable1 = json["response"]["fieldname1"], variable2 = json["response"]["fieldname2"]
var currentRecord = structure(variable1, variable2)
myArray.append(currentRecord)
else
println("error")
【讨论】:
谢谢,我将使用 Swift 1 的解决方案。即使我不乐意这样做,因为某些变量可能需要为空【参考方案2】:@oisdk 已经解释了由if let
定义的变量的范围仅在该语句的大括号内。
这就是你想要的,因为如果 if let
语句失败,则变量未定义。 if let 的全部意义在于安全地解开您的可选项,以便在大括号内,您可以确定变量是有效的。
另一个解决问题的方法(在 Swift 1.2 中)是使用多个 if let 语句:
if let variable1 = json["response"]["fieldname1"],
let variable2 = json["response"]["fieldname2"]
//This code will only run if both variable1 and variable 2 are valid.
var currentRecord = structure(variable1, variable2)
myArray.append(currentRecord)
else
println("error")
【讨论】:
谢谢,我将使用 oisdk 提出的解决方案,但我仍然认为有更好的解决方案,因为某些变量可能需要为空【参考方案3】:即使变量 1 失败,您的代码也会始终检查变量 2。 但导致(已编辑!)不是错误。
您可以在同一行中检查和分配两个变量。只有当两个变量都不为零时,才会执行“true”分支
let response = json["response"]
if let variable1 = response["fieldname1"], variable2 = response["fieldname2"]
let currentRecord = structure(variable1, variable2)
myArray.append(currentRecord)
else
println("error")
【讨论】:
检查 variable2 不会导致错误 - 检查中没有任何内容依赖于 variable1。它应该可以正常工作。错误是在其范围之外使用这两个变量。以上是关于if let variable - 使用未解析的标识符的主要内容,如果未能解决你的问题,请参考以下文章
What's the difference between using “let” and “var” to declare a variable in JavaScript?