在有条件的声明中守卫

时间:2016-06-02 20:22:53

标签: ios swift if-statement

根据units参数的值,我想使用guard打开华氏温度或摄氏温度。但是,我收到有关

的错误
  

使用未解析的标识符' temp'

来自以下示例代码

let units = 0

if units == 0 {
  guard let temp = currentDict["temp_f"] as? String else { return nil }
} else {
  guard let temp = currentDict["temp_c"] as? String else { return nil }
}

为什么guard在此示例中不起作用?

3 个答案:

答案 0 :(得分:2)

它不起作用,因为temp的范围仅限于if语句。试试这个:

let key = units == 0 ? "temp_f" : "temp_c"
guard let temp = currentDict[key] as? String else { return nil }

答案 1 :(得分:1)

正如其他人已经说过的那样,您可能在temp范围之外使用if/else吗?

此代码可以使用

func foo(units:Int) -> String? {
    let result: String
    if units == 0 {
        guard let temp = currentDict["temp_f"] as? String else { return nil }
        result = temp
    } else {
        guard let temp = currentDict["temp_c"] as? String else { return nil }
        result = temp
    }
    return result
}

答案 2 :(得分:-1)

您是否在if / else语句之外使用临时变量?这很可能是你问题的根源。