2017-07-07 59 views
0

我目前擁有的代碼將採用json數據給我並解析它,但是我已將所有內容包裝在for循環中,我不知道如何將其取出。將JSON數據轉換爲Swift中的可用變量3

JSON數據:

[ 
{ 
"id": 1, 
"displayName": "Jacob Blacksten", 
"department": "DF", 
"mamager": "San", 
"office": "NYC", 
"util": 2 
} 
] 

工作代碼:

do { 
    let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) 

     guard let array = json as? [Any] else {return} 

     for user in array { 
      guard let userDict = user as? [String: Any] else {return} 
      guard let id = userDict["id"] as? Int else { return } 
      guard let name = userDict["displayName"] as? String else { return} 
      guard let department = userDict["department"] as? String else {return} 
      guard let manager = userDict["mamager"] as? String else {return} 
      guard let office = userDict["office"] as? String else {return} 
      guard let util = userDict["util"] as? Int else {return} 

       print(id) 
       print(name) 
       print(department) 
       print(manager) 
       print(office) 
       print(util) 
      } 

     } catch{ 
      print(error) 
     } 

你會發現一切都在裏面一個for循環創建所有 「用戶」 的數組。但是,我只有一個用戶,我希望能夠說出「id」並將其用作變量,以便稍後將其打印到我的應用中的標籤中。我希望這是有道理的。我基本上只是想操縱這個JSON數據,這樣我就可以使用它並在我的應用程序的標籤中打印它們。

+0

你爲什麼把用'mutableContainers'一個類型,一個不變的常數('讓json')? – vadian

回答

1

如果你想在其他地方使用你的變量,你只需要將它們保存到你的循環範圍之外。我會建議創建一個User類並將json的值保存到User的一個實例中。

// User.swift 
class User { 
    // Identifier 
    let id: Int 

    // Instance variables 
    var name: String? 
    var department: String? 
    var manager: String? 
    var office: String? 
    var util: Int? 

    init(withId id: Int) { 
     self.id = id 
    } 
} 

然後,你可以改變你的循環是這樣的。

var user: User? 

do { 
    let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) 

    guard let array = json as? [Any], 
     let userDict = array[0] as? [String: Any], 
     let id = userDict["id"] as? Int, 
     let name = userDict["displayName"] as? String, 
     let department = userDict["department"] as? String, 
     let manager = userDict["manager"] as? String, 
     let office = userDict["office"] as? String, 
     let util = userDict["util"] as? Int else { 
     return 
    } 

    user = User(withId: id) 

    user.name = name 
    user.department = department 
    user.manager = manager 
    user.office = office 
    user.util = util 

} catch{ 
    print(error) 
} 

// Here, the user variable has all the updated info 
userIdLabel?.text = "\(user?.id)" 

注:這一切是在瀏覽器中,並沒有測試