I'm using PHP to send data in JSON to create an array of custom objects in Swift. I've been told retrieveData()
is bad code because it's in an infinite loop. I'm not sure on how to clean it up so it can be more efficient. On a side note, is there a way I can save the custom objects in an array that is easier to save to UserDefaults
without NSCoder?
The app is basically a blog reader. It gets data from a server's database and displays it in a tableview.
MainController.swift
var jsonArray: NSMutableArray = []
var mainArray = [Blog]()
// Retrieving Data from Server
func retrieveData() {
let getDataURL = "http://example.com/receiving.php"
let url: NSURL = NSURL(string: getDataURL)!
do {
let data: Data = try Data(contentsOf: url as URL)
jsonArray = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as! NSMutableArray
// Looping through jsonArray
for i in 0..<jsonArray.count {
// Create Blog Object
guard let bID: String = (jsonArray[i] as AnyObject).object(forKey: "id") as? String,
let bName: String = (jsonArray[i] as AnyObject).object(forKey: "blogName") as? String,
let bStatus1: String = (jsonArray[i] as AnyObject).object(forKey: "blogStatus1") as? String,
let bStatus2: String = (jsonArray[i] as AnyObject).object(forKey: "blogStatus2") as? String,
let bURL: String = (jsonArray[i] as AnyObject).object(forKey: "blogURL") as? String,
let bType: String = (jsonArray[i] as AnyObject).object(forKey: "blogType") as? String,
let bDate: String = (jsonArray[i] as AnyObject).object(forKey: "blogDate") as? String,
let bPop: String = (jsonArray[i] as AnyObject).object(forKey: "blogPop") as? String
else {
print("Error: (Creating Game Object)")
return
}
// Add Blog Objects to mainArray
mainArray.append(Blog(blogName: bName, andBlogStatus1: bStatus1, andBlogStatus2: bStatus2, andBlogURL: bURL, andBlogID: bID, andBlogType: bType, andBlogDate: bDate, andBlogPop: bPop))
}
}
catch {
print("Error: (Retrieving Data)")
}
myTableView.reloadData()
}
Blog.swift - Handles the Blog
custom objects that it gets from retrieveData
import UIKit
class Blog: NSObject {
// Strings
var blogName: String
var blogStatus1: String
var blogStatus2: String
var blogURL: String
var blogID: String
var blogType: String
var blogDate: String
var blogPop: String
// Converting Strings into Objects
init(blogName bName: String,
andBlogStatus1 bStatus1: String,
andBlogStatus2 bStatus2: String,
andBlogURL bURL: String,
andBlogID bID: String,
andBlogType bType: String,
andBlogDate bDate: String,
andBlogPop bPop: String)
{
self.blogName = bName
self.blogStatus1 = bStatus1
self.blogStatus2 = bStatus2
self.blogURL = bURL
self.blogID = bID
self.blogType = bType
self.blogDate = bDate
self.blogPop = bPop
super.init()
}
}