2017-08-30 61 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"