2016-11-11 25 views
0

我有接收來自API調用如何將另一個數組內的數組存儲到已從Swift中傳遞的全局變量中?

陣列在這一陣列的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" = "[email protected]"; 
"user_name" = "Steve Base"; 
}] 

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

我有一個全局變量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) 

        } 

打印命令成功打印userStats陣列,其所有的報頭(totalWins,totalDraws, totalLosses ...) -

如何將此數組存儲到我的全局變量var userStatsArray = [AnyObject]()中,以便我可以將它傳遞給另一個VC?

回答

0

最好你創建一個這樣的自定義類,然後用該自定義類類型聲明該數組。那麼你將你的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) 
       } 
+0

那麼數組'userStatsArray'就可以通過segue傳遞,並且內容將按照userStats類中的定義進行設置? – RDowns

+0

您可以通過在目標視圖控制器中聲明相同類型的數組,將userStatsArray傳遞到任何您想要的位置。 –

+0

爲什麼要在自定義類中聲明可選屬性,但只聲明非可選初始化程序?考慮在一個類中必須使用一個聲明的初始化器。 – vadian

0

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) 
相關問題