2016-12-11 50 views
0

我想爲我的警報框定義一個動態變量。我從我的服務器得到一個JSON,像OK,錯誤,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'的如果上述條件並從條件括號 –

+0

內部移除'let'的'如果...'之前:'讓ERROR_MSG = 「'在」'如果...':'error_msg = ...'。 – shallowThought

+1

同樣,不需要將它聲明爲兩個答案中建議的變量。 –

回答

1

在您的代碼中,error_msg的作用域限於if語句中的塊。 您可以在if blocks範圍之外聲明error_msg,例如

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

您應該在if語句之外聲明let error_msg,以便在將它傳遞給警報時可見。

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

這是一個完美的使用案例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

你也可以用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 
)