iOS開發中,經常會涉及到將從后端請求的json數據轉換成對象的操作。在這個過程中,我們可以使用泛型來簡化代碼,并且可以避免很多不必要的類型轉換。
首先,我們需要定義一個泛型方法來完成json轉對象的操作。
func parseJSON<T: Decodable>(json: Data) throws -> T {
let decoder = JSONDecoder()
return try decoder.decode(T.self, from: json)
}
在該方法中,我們使用了Swift 4中新增的Codable協議。Codable協議是Encodable和Decodable兩個協議的組合,用來實現對數據的編碼和解碼。而我們在泛型類型參數中,限定了T必須實現Decodable協議。
接下來,我們可以在使用時直接傳入需要轉換成的對象類型,然后調用該方法進行轉換:
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
最后,需要注意的是,這個方法可能拋出異常,因為json數據格式不正確,或者轉換成的對象類型不合法。