-
-
Save ergunkocak/dc1d554668400d83a904f3df408ec793 to your computer and use it in GitHub Desktop.
Swift 4 Codable example (Type -> JSON)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Simple Type - Person | |
struct Person: Codable { | |
let name: String | |
let age: Int | |
func getString() -> String { | |
return "Name: \(name), Age: \(age)" | |
} | |
} | |
//Create Person Struct | |
let person = Person(name: "Aaron", age: 33) | |
print("Original Person Struct: " + person.getString() + "\n") | |
//Encode Person Struct as Data | |
let encodedData = try? JSONEncoder().encode(person) | |
//Create JSON | |
var json: Any? | |
if let data = encodedData { | |
json = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) | |
} | |
//Print JSON Object | |
if let json = json { | |
print("Person JSON:\n" + String(describing: json) + "\n") | |
} | |
//Convert JSON back to Data | |
var jsonData: Data? | |
if let json = json { | |
jsonData = try? JSONSerialization.data(withJSONObject: json) | |
} | |
//Convert JSON Data back to Person Struct | |
var decodedPerson: Person? | |
if let data = jsonData { | |
decodedPerson = try? JSONDecoder().decode(Person.self, from: data) | |
} | |
//Print Person Struct | |
if let decodedPerson = decodedPerson { | |
print("Decoded Person Struct: " + decodedPerson.getString()) | |
} | |
/* | |
Output: | |
Original Person Struct: Name: Aaron, Age: 33 | |
Person JSON: | |
{ | |
age = 33; | |
name = Aaron; | |
} | |
Decoded Person Struct: Name: Aaron, Age: 33 | |
*/ | |
//Nested Type Abbreviated Example | |
struct Family: Codable { | |
let familyName: String | |
var familyMembers: [Person] | |
init(familyName: String, familyMembers: [Person] = [Person]()) { | |
self.familyName = familyName | |
self.familyMembers = familyMembers | |
} | |
mutating func addFamilyMember(relative person: Person) { | |
familyMembers.append(person) | |
} | |
} | |
let mother = Person(name: "Arlene", age: 35) | |
let father = Person(name: "Calvin", age: 36) | |
var family = Family(familyName: "Hinton") | |
family.addFamilyMember(relative: mother) | |
family.addFamilyMember(relative: father) | |
print("\n\n***Encoding and Decoding complex types***\n") | |
print("Family Struct") | |
for person in family.familyMembers { | |
print("Family Member: " + person.getString()) | |
} | |
//Encode Family Struct as Data | |
let familyData = try? JSONEncoder().encode(family) | |
//Create JSON | |
var familyJson: Any? | |
if let data = familyData { | |
json = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) | |
} | |
//Print JSON Object | |
if let json = json { | |
print("\nFamily JSON:\n" + String(describing: json) + "\n") | |
} | |
//Convert JSON back to Data | |
if let json = json { | |
jsonData = try? JSONSerialization.data(withJSONObject: json) | |
} | |
//Convert JSON Data back to Person Struct | |
var decodedFamily: Family? | |
if let data = jsonData { | |
decodedFamily = try? JSONDecoder().decode(Family.self, from: data) | |
} | |
//Print Family Struct | |
print("\nDecoded Family Struct:") | |
if let decodedFamily = decodedFamily { | |
for person in decodedFamily.familyMembers { | |
print("Family Member: " + person.getString()) | |
} | |
} | |
/* | |
Output: | |
***Encoding and Decoding complex types*** | |
Family Struct | |
Family Member: Name: Arlene, Age: 35 | |
Family Member: Name: Calvin, Age: 36 | |
Family JSON: | |
{ | |
familyMembers = ( | |
{ | |
age = 35; | |
name = Arlene; | |
}, | |
{ | |
age = 36; | |
name = Calvin; | |
} | |
); | |
familyName = Hinton; | |
} | |
Decoded Family Struct: | |
Family Member: Name: Arlene, Age: 35 | |
Family Member: Name: Calvin, Age: 36 | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment