繁体   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