2016-12-11 2 views
0

Я хочу определить динамическую переменную для моего окна оповещений. Я получаю JSON от моего сервера, как нормально, ошибка, username_in_use, и т.д. и т.п.Swift 3: Установить переменную в выражении if/else

let response = parseJSON["message"] as? String 

if response == "username_in_use" { 
    let error_msg = "Username in already use!" 
} else if response == "email_in_use" { 
    let error_msg = "Email address in already use!" 
} else { 
    let error_msg = "Unknown Error!" 
} 

alertView.showTitle(
    alertTitle: error_msg 
) 

Но я получаю это сообщение:

Use of unresolved identifier 'error_msg' 

Как можно установить динамическое значение для мой заголовок?

Спасибо за помощь и извините, мой плохой английский.

+0

'пусть ERROR_MSG: String' выше, если условия и удалите' let' изнутри условия скобки –

+0

Перед тем, 'если ...': 'пусть ERROR_MSG = ""' в 'если ... ':' error_msg = ... '. – shallowThought

+1

Опять же, нет необходимости объявлять его переменной как предложено в обоих ответах. –

ответ

1

В вашем коде область ошибок error_msg ограничена блоками внутри оператора if. Вы можете объявить error_msg за пределами области if, например.

let response = parseJSON["message"] as? String 
var error_msg:String 

if response == "username_in_use" { 
    error_msg = "Username in already use!" 
} else if response == "email_in_use" { 
    error_msg = "Email address in already use!" 
} else { 
    error_msg = "Unknown Error!" 
} 

alertView.showTitle(
    alertTitle: error_msg 
) 
+0

спасибо человек !! –

+1

Это было бы более уместно в качестве оператора Switch. – Alexander

0

Вы должны объявить let error_msg вне оператора if, чтобы он был виден, когда вы передаете его оповещению.

let response = parseJSON["message"] as? String 

    var error_msg = "" 

    if response == "username_in_use" { 
     error_msg = "Username in already use!" 
    } else if response == "email_in_use" { 
     error_msg = "Email address in already use!" 
    } else { 
     error_msg = "Unknown Error!" 
    } 

    alertView.showTitle(alertTitle: error_msg) 
2

Это идеальный случай использования для переключения высказывания:

let errorMsg: String 

switch response { 
case "username_in_use": errorMsg = "Username in already use!" 
case "email_in_use": errorMsg = "Email address in already use!" 
default: errorMsg = "Unknown Error!" 
} 
+0

Вы также можете использовать let вместо var –

+1

@LeoDabus О, интересно, приятно! – Alexander

1

Если вы хотите использовать только значение, возможно, существующий (Any?), Соответствующего ключ "message" в parseJSON словаре для прямых дальнейшего обработки/перевода, вы не обязательно должны сохранять это значение, но можете использовать его в строке, чтобы продолжить обработку его до допустимого сообщения об ошибке. Например, используя switch заявление:

var error_msg: String = "Unknown error" 
switch parseJSON["message"] { 
    case let val as String where val == "username_in_use": error_msg = "Username in already use!" 
    case let val as String where val == "email_in_use": error_msg = "Email address in already use!" 
    case _:() 
} 

// ... 
alertView.showTitle(
    alertTitle: error_msg 
) 

Или использовать хелпер словаря для отображения JSON "message" коды (значения) для вывода сообщений об ошибках, легко позволяя использовать nil сливающийся оператор на поставку по умолчанию (неизвестная ошибке) сообщение:

let error_msgs = [ 
    "username_in_use" : "Username in already use!", 
    "email_in_use" : "Email address in already use!"] 

let error_msg = error_msgs[parseJSON["message"] as? String ?? ""] ?? "Unknown Error!" 

// ... 
alertView.showTitle(
    alertTitle: error_msg 
) 
Смежные вопросы