从 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 变量全局范围
在 Visual Basic for Applications 中创建一个全局变量