обновление атрибутов пользовательского класса с помощью URLsession - PullRequest
0 голосов
/ 13 января 2019

У меня есть следующая проблема, которую я не мог решить, возможно, потому что я недостаточно хорошо понимаю urlsessions. Итак, у меня есть база данных mysql и скрипт php, который может получить определенные значения базы данных. Я определил свой собственный простой класс, который имеет определенные атрибуты из таблицы в mysql, и я определил метод в этом пользовательском классе, который извлекает эти данные и присваивает эти извлеченные значения объекту. Мой код, который делает это, выглядит следующим образом (вероятно, много недостатков в моем коде ...), который я пробовал в файле игровой площадки в XCode, класс называется foodClass (так как база данных о еде):

import UIKit

class foodClass {
    var description : String?
    var price : Float?

    func downloadDish(){
        let requestURL = NSURL(string: "http://localhost/downloadDishes.php")

        let request = NSMutableURLRequest(url: requestURL! as URL)

        request.httpMethod = "POST"
        //example id, which tells php which food to pick
        let postString = "id=\(12)"
        let utf8PostString = postString.data(using: .utf8)

        let task = URLSession.shared.uploadTask(with: request as URLRequest, from: utf8PostString){
            data, response, error in

            if error != nil {

                DispatchQueue.main.async {
                    print("no connection maybe?")
                }
            }
            else {
                if data != nil {
                    do {
                        let dishJSON =  try JSONSerialization.jsonObject(with: data!) as! NSDictionary
                        let disharray = dishJSON["dishes"] as! NSArray
                        //print to make sure that we get a response
                        print(disharray[0])
                        let tempdish = disharray[0] as! NSArray
                        self.description = tempdish[2] as! String
                        self.price = (tempdish[3] as? NSNumber)?.floatValue ?? 4.99

                    } catch {
                        print(error)
                    }
                }
            }
        }
        task.resume()
    }
}


//test it out
var dish = foodClass()

dish.downloadDish()

print(dish.description)

Таким образом, оператор print "print (disharray [0])" точно показывает, что находится в базе данных, поэтому при извлечении данных из базы данных ничего не происходит неправильно. Но почему-то описание атрибутов и цена не инициализируются после вызова функции downloadDish (). Может быть, я не понимаю что-то важное о классах и URLsessions.

...