2017-08-30 40 views
0

我無法檢索並打印jobDate數據。我的代碼有什麼問題?在swift中檢索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

首先使用standard單一實例和可選的綁定從UserDefaults安全地獲取數據 - 除非你註冊的鍵/值對。所有從未使用value(forKeyUserDefaults

第二和從未使用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

由於「作業」是一個數組,所以很可能你應該期待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"