2016-06-02 3 views
0

В зависимости от значения параметра units, я хотел бы развернуть температуру по Фаренгейту или Цельсию, используя guard. Тем не менее, я получаю ошибку оОхрана в условном заявлении

Использование неразрешенного идентификатора «Темп»

из следующего примера кода

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 не работает в этом примере?

+0

Как 'currentDict' определено? –

+0

@appzYourLife currentDict - это словарь из [String: AnyObject] – wigging

+0

Кажется, что код отсутствует. Вы должны показать весь соответствующий код, включая строку, в которой указывается ошибка. Ваш вопрос будет легче понять, поскольку мы теперь просто догадываемся, что вы имеете в виду. http://stackoverflow.com/help/how-to-ask – Cenny

ответ

2

Это не сработает, потому что temp был включен в список только if. Попробуйте вместо этого:

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

Мне нравится этот подход, но можете ли вы пояснить, как работает первая линия? Что это "?" и ":" означают символы? – wigging

+2

Это [тернарный условный оператор] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html#//apple_ref/doc/uid/TP40014097-CH6-ID71) или более популярным является inline if. В основном это эквивалентно 'if units == 0 {key =" temp_f "} else {key =" temp_c "}' –

-1

Вы используете переменную temp вне инструкции if/else? Скорее всего, это источник вашей проблемы.

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 
} 
Смежные вопросы