Проблема с парсингом json


#1

Привет! Вот так выглядит класс ячейки:

class PostsCollectionViewCell: UICollectionViewCell {

    let path = "https://jsonplaceholder.typicode.com/posts"
    var data: Posts? = nil

    @IBOutlet weak var bgView: UIView!
    @IBOutlet weak var titleLabel: UILabel!
    @IBOutlet weak var searchTextField: UITextField!
    @IBOutlet weak var searchButton: UIButton!
    @IBOutlet weak var postBodyLabel: UILabel!
    @IBOutlet weak var postTitleLabel: UILabel!

    @IBAction func searchButtonTapper(_ sender: UIButton) {
        data = JSONManager.performRequest(dataType: .posts, path: path, id: 1) as? Posts
}

    override func awakeFromNib() {
        super.awakeFromNib()
        self.titleLabel.text = "Posts"
        self.searchButton.setTitle("Search", for: .normal)
        self.bgView.backgroundColor = UIColor.orange
    }
}

Класс JSONManager:

class JSONManager {

    static func performRequest(dataType: JSONDataType, path: String, id: Int) -> JSONData {
        let fullPath = path + "/" + String(id)
        let url = URL(string: fullPath)
        let data = DataFactory.createData(type: dataType)
        print(fullPath)

        Alamofire.request(url!).responseJSON { (responseData) in

            if ((responseData.result.value) != nil) {

                let json = JSON(responseData.result.value!)

                print("JSON - \(json)")
                print("DATA - \(data)")

                if let dictionaryData = json.dictionaryObject as [String:AnyObject]? {
                    data.setupDataFromJSON(json: dictionaryData, id: 1)

                } //Second statement

            } //First statement

        } //Completion Handler

        return data
    }
}

В JSONManager данные успешно приходят, но вот в классе ячейки они всегда nil. Почему так происходит и как это можно исправить? И как я могу обновить данные в ячейке, после того, как получу их?

Сама задумка заключается в том, что нажав на кнопку в ячеке, идет запрос на сервер, после чего все данные в ячейке обновляются на те, что пришли.


#2
class JSONManager {
    static func performRequest(dataType: JSONDataType, path: String, id: Int, completion: @escaping (JSONData) -> Void) {
        let fullPath = path + "/" + String(id)
        let data = DataFactory.createData(type: dataType)
        Alamofire.request(URL(string: fullPath)!).responseJSON { responseData in
            if let value = responseData.result.value, let dictionaryData = JSON(value).dictionaryObject as [String: AnyObject]? {
                data.setupDataFromJSON(json: dictionaryData, id: 1)
                completion(data)
            }
        }
    }
}

JSONManager.performRequest(dataType: .posts, path: path, id: 1) { data in
    print(data)
}

#3

Красота! Все отлично работает. Даже не подумал бы о таком простом решении. Спасибо!