iOS開(kāi)發(fā)中,經(jīng)常會(huì)涉及到將從后端請(qǐng)求的json數(shù)據(jù)轉(zhuǎn)換成對(duì)象的操作。在這個(gè)過(guò)程中,我們可以使用泛型來(lái)簡(jiǎn)化代碼,并且可以避免很多不必要的類型轉(zhuǎn)換。
首先,我們需要定義一個(gè)泛型方法來(lái)完成json轉(zhuǎn)對(duì)象的操作。
func parseJSON<T: Decodable>(json: Data) throws -> T {
let decoder = JSONDecoder()
return try decoder.decode(T.self, from: json)
}
在該方法中,我們使用了Swift 4中新增的Codable協(xié)議。Codable協(xié)議是Encodable和Decodable兩個(gè)協(xié)議的組合,用來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)的編碼和解碼。而我們?cè)诜盒皖愋蛥?shù)中,限定了T必須實(shí)現(xiàn)Decodable協(xié)議。
接下來(lái),我們可以在使用時(shí)直接傳入需要轉(zhuǎn)換成的對(duì)象類型,然后調(diào)用該方法進(jìn)行轉(zhuǎn)換:
struct User: Decodable {
var name: String
var age: Int
}
let json = "{\"name\":\"Tom\",\"age\":18}".data(using: .utf8)!
let user = try parseJSON(json: json) as User
print(user.name) // Tom
print(user.age) // 18
最后,需要注意的是,這個(gè)方法可能拋出異常,因?yàn)閖son數(shù)據(jù)格式不正確,或者轉(zhuǎn)換成的對(duì)象類型不合法。