Here is an example for you to make things simpler and easier. My String data in my database is a JSON file that looks like this:
[{"stype":"noun","sdsc":"careless disregard for consequences","swds":"disregard, freedom, impulse, licentiousness, recklessness, spontaneity, thoughtlessness, uninhibitedness, unrestraint, wantonness, wildness","anwds":"restraint, self-restraint"},{"stype":"verb","sdsc":"leave behind, relinquish","swds":"abdicate, back out, bail out, bow out, chicken out, cop out, cut loose, desert, discard, discontinue, ditch, drop, drop out, duck, dump, dust, flake out, fly the coop, give up the ship, kiss goodbye, leave, leg it, let go, opt out, pull out, quit, run out on, screw, ship out, stop, storm out, surrender, take a powder, take a walk, throw over, vacate, walk out on, wash hands of, withdraw, yield","anwds":"adopt, advance, allow, assert, begin, cherish, come, continue, defend, favor, go, hold, keep, maintain, persevere, pursue, remain, retain, start, stay, support, uphold"},{"stype":"verb","sdsc":"leave in troubled state","swds":"back out, desert, disown, forsake, jilt, leave, leave behind, quit, reject, renounce, throw over, walk out on","anwds":"adopt, allow, approve, assert, cherish, come, continue, defend, favor, keep, pursue, retain, stay, support, uphold"}]
To load this JSON string data, follow these simple steps. First create a class for my MoreData object as follows:
class MoreData { public private(set) var stype : String public private(set) var sdsc : String public private(set) var swds : String public private(set) var anwds : String init( stype : String, sdsc : String, swds : String, anwds : String) { self.stype = stype self.sdsc = sdsc self.swds = swds self.anwds = anwds }}
Secondly, create my String extension for my JSON string as follows:
extension String { func toJSON() -> Any? { guard let data = self.data(using: .utf8, allowLossyConversion: false) else { return nil } return try? JSONSerialization.jsonObject(with: data, options: .mutableContainers) }}
Third, create the My Srevices class to process my string data as follows:
class Services { static let instance: Services = Services() func loadMoreDataByString(byString: String) -> [MoreData]{ var myVariable = [MoreData]() guard let ListOf = byString.toJSON() as? [[String: AnyObject]] else { return [] } for object in ListOf { let stype = object["stype"] as? String ?? "" let sdsc = object["sdsc"] as? String ?? "" let swds = object["swds"] as? String ?? "" let anwds = object["anwds"] as? String ?? "" let myMoreData = MoreData(stype : stype, sdsc : sdsc, swds : swds, anwds : anwds) myVariable.append(myMoreData) } return myVariable }}
Finally, call this function from the view controller to load the data into the table view as follows:
func handlingJsonStringData(){ moreData.removeAll(keepingCapacity: false) moreData = Services.instance.loadMoreDataByString(byString: jsonString) print(self.moreData.count) tableView.reloadData() }