if let variable - 使用未解析的标识符
if let variable - Use of unresolved identifier
我正在使用 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 失败,您的代码也会始终检查变量 2。 但是 导致(已编辑!)不是 错误。
您可以在同一行中检查和分配两个变量。只有当两个变量都不为 nil
时,才会执行 "true" 分支
let response = json["response"]
if let variable1 = response["fieldname1"], variable2 = response["fieldname2"] {
let currentRecord = structure(variable1, variable2)
myArray.append(currentRecord)
} else {
println("error")
}
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")
}
@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")
}
我正在使用 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 失败,您的代码也会始终检查变量 2。 但是 导致(已编辑!)不是 错误。
您可以在同一行中检查和分配两个变量。只有当两个变量都不为 nil
时,才会执行 "true" 分支let response = json["response"]
if let variable1 = response["fieldname1"], variable2 = response["fieldname2"] {
let currentRecord = structure(variable1, variable2)
myArray.append(currentRecord)
} else {
println("error")
}
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")
}
@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")
}