我想在if语句之外使用变量或数组。在javascript中,您可以在if语句之外提升变量,但不确定如何在swift中执行此操作?我尝试过使用struct,但我不确定要进入哪个方向。我想在函数中使用num
并在每个数组中递增。但是,需要能够通过文件访问变量。
let jsonWithArrayRoot = try? JSONSerialization.jsonObject(with: fileData, options: [])
var zone: Int
var sound: String
var distance: Int
var title: String
var duration: Int
var type: String
var color: Int
var num:Int
num=0
if let array = jsonWithArrayRoot as? [AnyObject] {
let json = array[num]
test = array
zone = json["zone"] as? Int ?? 0
sound = json["sound"] as? String ?? ""
distance = json["distance"] as? Int ?? 0
title = json["title"] as? String ?? ""
duration = json["duration"] as? Int ?? 0
type = json["type"] as? String ?? ""
color = json["color"] as? Int ?? 0
print(zone)
}
//I want to access variables and later on
print(zone)
print(sound)
print(distance)
print(title)
print(type)
print(color)
答案 0 :(得分:0)
您应该立即为变量提供默认值,然后根据JSON数据更改它们。您当前的代码将默认值置于 JSON解析块中,这意味着如果if let array = jsonWithArrayRoot...
失败,变量将没有值。
就个人而言,我也会将as? Int ??
行重构为更漂亮的东西,但这是另一个问题。
这里的代码包含一个应该运行良好的最小修补程序:
let jsonWithArrayRoot = try? JSONSerialization.jsonObject(with: fileData, options: [])
var zone = 0
var sound = ""
var distance = 0
var title = ""
var duration = 0
var type = ""
var color = 0
var num = 0
if let array = jsonWithArrayRoot as? [AnyObject] {
let json = array[num]
zone = json["zone"] as? Int ?? zone
sound = json["sound"] as? String ?? sound
distance = json["distance"] as? Int ?? distance
title = json["title"] as? String ?? title
duration = json["duration"] as? Int ?? duration
type = json["type"] as? String ?? type
color = json["color"] as? Int ?? color
}
答案 1 :(得分:0)
使用警卫。
guard let array = jsonWithArrayRoot as? [AnyObject] else {return}
让json = array [num]
zone = json["zone"] as? Int ?? zone
sound = json["sound"] as? String ?? sound
distance = json["distance"] as? Int ?? distance
title = json["title"] as? String ?? title
duration = json["duration"] as? Int ?? duration
type = json["type"] as? String ?? type
color = json["color"] as? Int ?? color
现在可以在任何地方使用数组变量。