2017-08-30 35 views
0

jobDateデータを取得して印刷できません。私のコードは何が間違っていますか?すぐにJSONデータを取得する

let retrievetime = UserDefaults().value(forKey: "retrieve")as? NSDictionary 
print(retrievetime!) 

if let job = retrievetime!["jobs"] as? [String:Any], let jobTitle = job["jobDate"] as? String { 
    self.navigationItem.title = jobTitle 
    print(jobTitle) 
} 

//self.navigationItem.title = "Test" 

プリント取得時間! JSON出力:すべての使用の

{ 
    jobs =({ 
    jobDate = "2017-08-31"; 
    jobEndTime = 1504144800; 
    jobID = 87; 
    jobTime = 1504137600; 
    }); 
    message = "Retrieve Sucessfully"; 
    result = success; 
} 
+1

「ジョブ」の最初のオブジェクトを取得する必要がありますが、配列、ではありません辞書。 – Moritz

答えて

0

まず、安全UserDefaultsからデータを取得するためにstandardシングルトンインスタンスおよびオプションのバインディングを使用する - あなたは、キー/値ペアを登録していない限り。 UserDefaultsを持つすべての決して使用value(forKey

セカンドとスウィフトで決して使用NSDictionaryコンパイラが行うことを示していますしない限り。複数形が示すように - - 最後にキーjobsの値がコメントで述べたように

配列である、あなたは配列

if let retrievetime = UserDefaults.standard.object(forKey: "retrieve") as? [String:Any] { 
    print(retrievetime) 

    if let jobs = retrievetime["jobs"] as? [[String:Any]], 
     let job = jobs.first, 
     let jobTitle = job["jobDate"] as? String { 
     self.navigationItem.title = jobTitle 
     print(jobTitle) 
    } 
} 
+0

そして、 "jobs"は配列なので、ほとんどの場合、0,1、またはそれ以上の辞書があり、それを処理するはずです。 – gnasher729

0
let retrievetime = UserDefaults().value(forKey: "retrieve")as? NSDictionary 
    print(retrievetime!) 

    if let job = retrievetime!["jobs"] as? [String:Any], let jobTitle = ((retrievetime!["jobs"] as? [String:Any])[0] as? NSDictionary)["jobDate"] as? String { 
     self.navigationItem.title = jobTitle 
     print(jobTitle) 
    } 

//self.navigationItem.title = "Test" 
関連する問題