2017-03-31 169 views
0

在我的項目字典的打印和存儲陣列我有字典的數組:iOS版 - 斯威夫特3

var list = [[String: Any]]() 

簡單地說,我做的是從一個網址下載一個JSON文件

//  json parsing 2 
     let url:String = "https://jsonplaceholder.typicode.com/users" 
     let urlRequest = URL(string: url) 
     URLSession.shared.dataTask(with: urlRequest!, completionHandler: {(data, response, error) in 
      if(error != nil) 
      { 
       print(error.debugDescription) 
      }else{ 
       do { 
        self.list = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) 
         as! [[String: Any]] 
        OperationQueue.main.addOperation { 
         self.tableView.reloadData() 
        } 
       }catch let error as NSError{ 
        print(error) 
       } 
      } 
     }).resume() 

現在,在列表(這是一個字典數組)中,我擁有所有感興趣的數據。但是如果我想挑選一個單一的值,或者打印列表的全部內容我該怎麼做?

編輯:另外,我可以簡化結構,不使用數組字典 ,但更簡單的東西?

+0

更多信息。如果您在一個示例中記下要解析的JSON以及您想要處理的JSON,我們可以將您推薦給解決方案。 –

+1

但對於單元格很容易,它就像self.list [indexPath.row] [「yourKey」] – Retterdesdialogs

+0

請看看SwiftyJSON。 https://github.com/SwiftyJSON/SwiftyJSON它將簡化這種類型的任務。 – dmorrow

回答

1

或者你可以使用歸檔

import Foundation 

class UserDataManager { 

var documentsURL: NSURL? 
var fileURL:NSURL? 

func setFileURL(file: String) { 
    documentsURL = FileManager.default.urls(for: .documentDirectory, 
                in: .userDomainMask)[0] as NSURL? 
    fileURL = documentsURL!.appendingPathComponent(file) as NSURL? 

} 

func write(file: String, mDict: NSDictionary) { 
    setFileURL(file: file) 
    let data : NSData = NSKeyedArchiver.archivedData(withRootObject: mDict) as NSData 
    if let fileAssigend = fileURL { 
     data.write(to: fileAssigend as URL, atomically: true) 
    } 
} 

func read(file: String) -> NSDictionary { 
    setFileURL(file: file) 

    var data:NSData? 
    if let url = fileURL { 
     data = NSData(contentsOf: url as URL) 
     if let result = data { 
      return NSKeyedUnarchiver.unarchiveObject(with: result as Data) as! NSDictionary 
     } 
    } 

    let dict = NSDictionary() 

    return dict 
} 
} 

寫使用它:

 let userDataManager = UserDataManager() 
     userDataManager.write(file: "userDataDict", mDict: responseObject) 

讀:需要

 let userDataManager = UserDataManager() 
     let userDataDict = userDataManager.read(file: "userDataDict")