2017-05-28 4 views
0

Ich möchte die Variablen oder Array außerhalb der if-Anweisung verwenden. In Javascript können Sie die Variablen außerhalb der if-Anweisung hissen, aber nicht sicher, wie es in swift zu tun ist? Ich habe versucht, eine Struktur zu verwenden, aber ich bin nicht sicher, in welche Richtung ich gehen soll. Ich möchte num in einer Funktion verwenden und durch jedes Array inkrementieren. Aber müssen in der Lage sein, über die Datei auf Variablen zuzugreifen.Zugriff auf Daten außerhalb einer if-Anweisung in swift

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) 
+1

Swift klagt, weil der Wert dieser Variablen * undefiniert * ist, wenn der 'if'-Zweig nie eingegeben wird - Sie müssen einen Standard- oder Anfangswert für diese Variablen angeben. – Dai

Antwort

0

Verwenden Wache.

guard lassen array = jsonWithArrayRoot als? [ANYOBJECT] else {return}

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 

Verwenden Array-Variable überall jetzt.

+0

es gibt mir einen Fehler der Rückgabe ungültig außerhalb einer Funktion –

+0

Ja Rückkehr kann innerhalb einer Funktion verwendet werden. Ich habe Ihre Frage falsch verstanden. Sie wollten Ihre anderen Variablen verwenden. –

+0

Ich deklariere immer meine Variablen als. var zone: Int? = 0 –

0

Sie sollten Ihren Variablen sofort die Standardwerte geben und sie später basierend auf den JSON-Daten ändern. Ihr aktueller Code setzt die Standardwerte innerhalb des JSON-Parsing-Blocks, was bedeutet, dass die Variablen keinen Wert hätten, wenn if let array = jsonWithArrayRoot... fehlschlägt.

Persönlich würde ich auch die as? Int ?? Zeilen etwas hübscher umgestalten, aber das ist ein anderes Problem.

Hier ist der Code mit einem minimalen Update, das gut funktionieren soll:

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 
} 
+0

Danke, es funktioniert. Wie würde das "wie" umgestalten? Int ?? ' ? –

Verwandte Themen