簡體   English   中英

如何將另一個數組中的數組存儲到Swift中從JSON傳遞的全局變量中?

[英]How to store an array that is within an another array to a global variable that has been passed from JSON in Swift?

我有一個從API調用接收數組的JSON

該數組中還有其他3個數組:

userDetailsuserStatscommunities

此API調用的示例是:

["communities": <__NSArrayI 0x6000002540a0>(
{
id = 5;
name = South;
},
{
id = 13;
name = HurraHarry;
},
{
id = 15;
name = EnclliffeT;
}
)
, "userStats": {
totalDraws = 3;
totalLosses = 10;
totalWins = 1;
}, "userDetails": {
id = 31;
"user_email" = "steve@gmail.com";
"user_name" = "Steve Base";
}]

我想將數組userStats存儲在一個可以傳遞給另一個VC的變量中。

我的var userStatsArray = [AnyObject]()有一個全局變量var userStatsArray = [AnyObject]()

下面的代碼處理JSON:

 let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String:AnyObject]
                  print (json!)

                  if let arr = json?["communities"] as? [[String:String]] {
                        self.communitiesArray = arr.flatMap { $0["name"]!}
                        self.communityIdsArray = arr.flatMap { $0["id"]!}

                    }

                    if let dict = json?["userDetails"] as? [String:String] {
                      self.tempPlayerId = [dict["id"]!]
                        let characterArray = self.tempPlayerId.flatMap { String.CharacterView($0) }
                        let newPlayerId = String(characterArray)
                        self.playerId = newPlayerId
                    }
                    if  let tempArray = json?["userStats"] as? [String:AnyObject]{
                        print ("here ", tempArray)

                    }

print命令成功打印出userStats數組及其所有標題(totalWins,totalDraws,totalLosses ...)-

如何將該數組存儲到全局變量var userStatsArray = [AnyObject]()以便將其傳遞給另一個VC?

最好創建一個這樣的自定義類,然后使用該自定義類類型聲明數組。 然后將userStats對象轉換為自定義類類型。

class userStats: NSObject {

var totalDraws: NSNumber?
var totalLosses: NSNumber?
var totalWins: NSNumber?

    init(totalDraws: NSNumber?, totalLosses: NSNumber?, totalWins: NSNumber?) {
        self.totalDraws = totalDraws
        self.totalWins = totalWins
        self.totalLosses = totalLosses
    }

}

var userStatsArray = [userStats]()

//更改代碼,例如

let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String:AnyObject]
              print (json!)

              if let arr = json?["communities"] as? [[String:String]] {
                    self.communitiesArray = arr.flatMap { $0["name"]!}
                    self.communityIdsArray = arr.flatMap { $0["id"]!}

                }

                if let dict = json?["userDetails"] as? [String:String] {
                  self.tempPlayerId = [dict["id"]!]
                    let characterArray = self.tempPlayerId.flatMap { String.CharacterView($0) }
                    let newPlayerId = String(characterArray)
                    self.playerId = newPlayerId
                }
                if  let tempArray = json?["userStats"]as? userStats {

                    userSytatsArray.append(tempArray)
                }

看看ObjectMapper 有了這個功能強大的框架,您可以為API返回的數據創建可映射的模型,並讓它為您執行整個工作:)

像這樣聲明您的模型類:

class UserInfo: Mappable {
var communities : [Community]?
var stats: UserStats?
var details: UserDetails?

required init?(map: Map) {
}

func mapping(map: Map) {
    communities <- map["communities"]
    stats <- map["userStats"]
    details <- map["userDetails"]
 }
}

class Community: Mappable {
var id: Int!
var name: String!

required init?(map: Map) {
}

func mapping(map: Map) {
    id <- map["id"]
    name <- map["name"]
 }
}

class UserStats: Mappable {
var totalDraws : Int!
var totalLosses : Int!
var totalWins : Int!

required init?(map: Map) {
}

func mapping(map: Map) {
    totalDraws <- map["totalDraws"]
    totalLosses <- map["totalLosses"]
    totalWins <- map["totalWins"]
 }
}

class UserDetails: Mappable {
var id : Int!
var email : String!
var username : String!

required init?(map: Map) {
}

func mapping(map: Map) {
    id <- map["id"]
    email <- map["user_email"]
    username <- map["user_name"]
 }
}

然后只是:

let user = UserInfo(JSONString: JSONString)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM