2017-05-28 9 views
0

ifステートメントの外で変数または配列を使用したいと思います。 javascriptではif文の外で変数を持ち上げることはできますが、それを迅速に行う方法はわかりません。私は構造体を使用しようとしましたが、どの方向に入るのかわかりません。関数内でnumを使い、各配列をインクリメントしたいと思います。しかし、ファイルを介して変数にアクセスできる必要があります。すぐにifステートメントの外のデータにアクセスする方法

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は、もし 'if'ブランチが決して入力されなかったなら、それらの変数の値は*未定義*であるので不平を言っています。これらの変数のデフォルト値または初期値を与える必要があります。 – Dai

答えて

0

使用ガード:

はここでうまく動作するはずです、最小限の修正であなたのコードです。

guard let array = jsonWithArrayRoot as? 【ANYOBJECT]他{リターン}

は今どこJSON =配列[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

関数の外側で無効な戻り値のエラーを与えています –

+0

戻り値は関数内で使用できます。私はあなたの質問を誤解しました。あなたは他の変数を使いたいと思っていました。 –

+0

私は常に私の変数を宣言します。 var zone:Int? = 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 
} 
+0

ありがとうございます。どのようにしてリファクタリングするのでしょうか? Int ?? ?? ? –

関連する問題