从 if 语句中创建一个全局变量

Posted

技术标签:

【中文标题】从 if 语句中创建一个全局变量【英文标题】:Making a variable from if statement global 【发布时间】:2016-11-10 19:48:30 【问题描述】:

在编码 JSON 时,我使用 if let 语句解包,但我想让变量全局可用

do 
  if
    let json = try JSONSerialization.jsonObject(with: data) as? [String: String], 
    let jsonIsExistant = json["isExistant"] 
  
    // Here I would like to make jsonIsExistant globally available
  

这甚至可能吗?如果不是,我可以在这个里面写一个if 声明,但我认为这不太聪明,甚至是不可能的。

【问题讨论】:

【参考方案1】:

delclare jsonIsExistant 在你想要的地方。如果你正在制作一个ios App,比上面viewDidLoad()创建变量

var jsonIsExistant: String?

那么此时使用它

do 
    if let json = try JSONSerialization.jsonObject(with: data) as? [String: String], 
    let tempJsonIsExistant = json["isExistant"] 
        jsonIsExistant = tempJsonIsExistant
    

虽然可以这样重写

do 
    if let json = try JSONSerialization.jsonObject(with: data) as? [String: String]  
        jsonIsExistant = json["isExistant"]
    
 catch 
    //handle error

如果以第二种方式处理,那么您必须在使用前检查 jsonIsExistant 是否为 nil,或者您可以立即使用 !如果您确定它每次成功成为 json 时总会有一个字段“isExistant”。

【讨论】:

【参考方案2】:

将变量暴露在if let 语句之外是没有意义的:


if let json = ... 
    //This code will only run if json is non-nil.
    //That means json is guaranteed to be non-nil here.

//This code will run whether or not json is nil.
//There is not a guarantee json is non-nil.

您还有其他一些选择,具体取决于您想要做什么:


您可以将需要json 的其余代码放在if 中。你说你不知道嵌套的if 语句是否“聪明甚至可能”。它们是可能的,并且程序员经常使用它们。您也可以将其提取到另一个函数中:

func doStuff(json: String) 
    //do stuff with json


//...
if let json = ... 
    doStuff(json: json)


如果您知道 JSON 不应该是 nil,您可以使用 ! 强制解包:

let json = ...!

您可以使用guard 语句将变量设为全局变量。 guard 中的代码只有在json nil 时才会运行。 guard 语句的主体必须退出封闭范围,例如通过抛出错误、从函数返回或带有标记的 break:

//throw an error
do 
    guard let json = ... else 
        throw SomeError
    
    //do stuff with json -- it's guaranteed to be non-nil here.




//return from the function 
guard let json = ... else 
    return

//do stuff with json -- it's guaranteed to be non-nil here.



//labeled break
doStuff: do 
    guard let json = ... else 
        break doStuff
    
    //do stuff with json -- it's guaranteed to be non-nil here.

【讨论】:

以上是关于从 if 语句中创建一个全局变量的主要内容,如果未能解决你的问题,请参考以下文章

在 C# Web 浏览器中创建 javascript 变量全局范围

DBT 模型:如何从查询中创建变量并在 If 语句中使用它

在 SQL Server 中创建全局静态变量?

在 Visual Basic for Applications 中创建一个全局变量

如何在 Microsoft MakeCode 中为 micro:bit 创建全局变量?

如何在 Erlang 中创建全局变量