2016-12-11 1 views
0

Je souhaite définir une variable dynamique pour ma zone d'alerte. Je reçois un JSON de mon serveur, comme ok, erreur, username_in_use, etc, etc.Swift 3: Définir une variable dans l'instruction 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 
) 

Mais je reçois ce message:

Use of unresolved identifier 'error_msg' 

Comment puis-je définir une valeur dynamique mon titre d'alerte?

Merci pour votre aide et désolé mon mauvais anglais.

+0

'laisser error_msg: CHAINE' au-dessus du si les conditions et retirez la' let' de l'intérieur des conditions entre parenthèses –

+0

Avant la '' si ...: 'laisser error_msg = ""' 'dans le cas ... ':' error_msg = ... '. – shallowThought

+1

Encore une fois, inutile de le déclarer comme variable comme suggéré dans les deux réponses. –

Répondre

1

Dans votre code, la portée de error_msg est limitée aux blocs dans l'instruction if. Vous pouvez déclarer error_msg en dehors de la portée if blocks, par ex.

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

merci l'homme !! –

+1

Cela serait plus approprié comme une instruction Switch. – Alexander

0

Vous devez déclarer le let error_msg en dehors de l'instruction if afin qu'il soit visible lorsque vous le transmettez à l'alerte.

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

Tel est le cas d'utilisation parfaite pour une instruction switch:

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

Vous pouvez aussi utiliser let au lieu de var –

+1

@LeoDabus Oh intéressant, sympa! – Alexander

1

Si vous voulez seulement utiliser la possible valeur existante (Any?) Correspondant à la clé "message" dans le parseJSON dictionnaire pour plus directe traitement/traduction, vous ne devez pas nécessairement stocker cette valeur, mais vous pouvez l'utiliser pour le traiter dans un message d'erreur valide. Par exemple, en utilisant switch déclaration:

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 
) 

Ou, utiliser un dictionnaire d'aide pour mapper les codes JSON "message" (valeurs) aux messages d'erreur, ce qui permet facilement l'utilisation du nil opérateur coalescent pour fournir une valeur par défaut (erreur inconnue) message:

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 
)