【问题标题】:Swift 3: Set variable in if/else statementSwift 3:在 if/else 语句中设置变量
【发布时间】:2017-04-26 14:52:29
【问题描述】:

我想为我的警报框定义一个动态变量。我正在从我的服务器获取一个 json,例如 ok、error、username_in_use 等。

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'

如何为我的提醒标题设置动态值?

感谢您的帮助,对不起我糟糕的英语。

【问题讨论】:

  • let error_msg: String 在 if 条件上方,并从条件括号内删除 let
  • if ... 之前:let error_msg = ""if ...error_msg = ...
  • 再次声明,无需像两个答案中所建议的那样将其声明为变量。

标签: if-statement swift3 let


【解决方案1】:

这是 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!"
}

【讨论】:

  • 你也可以用let代替var
  • @LeoDabus 哦,有趣,不错!
【解决方案2】:

如果您只想使用与parseJSON 字典中的键 "message" 对应的可能存在的 (Any?) 值进行直接进一步处理/翻译,则不必存储此值,但可以使用它内联以继续将其处理为有效的错误消息。例如,使用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
)

【讨论】:

    【解决方案3】:

    在您的代码中,error_msg 的范围仅限于 if 语句中的块。 您可以在 if 块范围之外声明 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
    )
    

    【讨论】:

    • 这将更适合作为 Switch 语句。
    【解决方案4】:

    您应该在 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)
    

    【讨论】:

      猜你喜欢
      • 2021-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      • 2014-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多