Я пытаюсь создать приложение IOS, которое считывает данные MYSQL с веб-сайта и отображает их пользователю.Вот файл, который анализирует данные:
import UIKit
protocol HomeModelDelegate{
func itemsDownloaded(bar_data:[DataModel])
}
class HomeModel: NSObject {
var delegate:HomeModelDelegate?
func getItems() {
//Hit the web service Url
let serviceUrl = "OMITTED"
//Download the json data
let url = URL(string: serviceUrl)
if let url = url{
//Create a URL Session
let session = URLSession(configuration: .default)
let task = session.dataTask(with: url, completionHandler: {(data, response, error) in
if error == nil {
//Succeeded
//Call the parse json function on the data
self.parseJson(data!)
}
else {
//Error occured
}
})
// Start the task
task.resume()
}
//Notify the view controller and pass the data back
}
//Parse it out into DataModel structs
func parseJson(_ data:Data){
var bardataarray = [DataModel]()
//parse the data into DataModel structs
do{
//parse the data into a json object
let jsonArray = try JSONSerialization.jsonObject(with: data, options: []) as! [Any]
//loop through each result in the json array
for jsonResult in jsonArray {
//Cast json result as a dictionary
let jsonDict = jsonResult as! [String:String]
//create new bar data and set its properties
let bardata = DataModel(name: jsonDict["Bar Name"]!, cover: jsonDict["Bar Cover"]!, deals: jsonDict["Drink Deals"]!)
//add it to the array
bardataarray.append(bardata)
}
//TODO Pass the location array back to delegate
delegate?.itemsDownloaded(bar_data: bardataarray)
}
catch{
print("There was an error")
}
}
//eof
}
Вот файл DataModel:
import Foundation
struct DataModel {
var name = ""
var cover = ""
var deals = ""
}
Вот контроллер представления:
import UIKit
class ViewController: UIViewController,
HomeModelDelegate, UITextViewDelegate {
var bar_info = [DataModel]()
var homeModel = HomeModel()
@IBOutlet weak var LionCoverView: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
homeModel.getItems()
homeModel.delegate = self
updateCover()
}
func updateCover(){
let size = bar_info.count
print(size)
}
func itemsDownloaded(bar_data: [DataModel]) {
//adding files to array that we can work with
self.bar_info = bar_data
print(bar_data[2].name)
}
}
ВВ контроллере представления я пытаюсь присвоить массив DataModels массиву bar_info, который я инициализировал в начале контроллера представления в загруженных элементах функции, но значения не отправляются.Кто-нибудь знает, что я делаю не так?Я поместил оператор print в items, загруженный на консоль, чтобы убедиться, что значения в bar_data существуют, и когда я его запускаю, программа выдает правильное значение с веб-сайта, так почему эти переменные не присваиваются массиву DataModel в начале?контроллера вида?