Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Kaakati/Realm-and-Swift-Codable

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

8 Commits

Repository files navigation

Realm & Swift Codable

Visits Badge alt text alt text

How to implement Swift 4 Codable with Realm Database in your Models?

This guide will demonstrate the implementation method for Realm Object containing a List, with Swift 4 Codable.

JSON

{
 "id": 732,
 "name": "Vendor Name",
 "logo": ".../thumb/missing.png",
 "kitchens": [
 {
 "id": 36,
 "name": "Sandwiches"
 },
 {
 "id": 37,
 "name": "Fast Food"
 }
 ]
 }

Model

import RealmSwift
class VendorsList : Object, Decodable {
 @objc dynamic var id : Int = 0
 @objc dynamic var name : String?
 @objc dynamic var logo : String?
 // Create your Realm List.
 var kitchensList = List<VendorKitchens>()
 
 override class func primaryKey() -> String? {
 return "id"
 }
 
 private enum CodingKeys: String, CodingKey {
 case id
 case name
 case logo
 // Set JSON Object Key
 case kitchensList = "kitchens"
 }
 
 public required convenience init(from decoder: Decoder) throws {
 self.init()
 let container = try decoder.container(keyedBy: CodingKeys.self)
 self.id = try container.decode(Int.self, forKey: .id)
 self.name = try container.decode(String.self, forKey: .name)
 self.logo = try container.decode(String.self, forKey: .logo)
 // Map your JSON Array response
 let kitchens = try container.decodeIfPresent([VendorKitchens].self, forKey: .kitchensList) ?? [VendorKitchens()]
 kitchensList.append(objectsIn: kitchens)
 
 }
 
}
class VendorKitchens : Object, Decodable {
 @objc dynamic var id : Int = 0
 @objc dynamic var name : String?
 
 override class func primaryKey() -> String? {
 return "id"
 }
 private enum CodingKeys: String, CodingKey {
 case id
 case name
 }
}

URLSession

guard let getUrl = URL(string: "https://Your_Endpoint/.../") else { return }
 URLSession.shared.dataTask(with: getUrl) { (data, response, error) in
 guard let data = data else { return }
 do {
 let decoder = JSONDecoder()
 let getData = try decoder.decode([VendorsList].self, from: data)
 for data in getData {
 print(data.id)
 print(data.name)
 print(data.logo)
 }
 for kitchen in data.kitchensList {
 print(kitchen.name)
 }
 }
 } catch let err {
 print("Err", err)
 }
 }.resume()

About

How to implement Swift 4 Codable with Realm Database

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /