尝试使用 Json 数据创建对象

Trying to create an object with Json data

我正在学习 Swift 并为大学开发一个小应用程序。我正在使用 Alamofire 和 SwiftyJSON 来处理我的 API.

模型产品

class Products {
    var id: Int {
        get {
            return self.id
        }
        set {
            self.id = newValue
        }
    }

    var name: String {
        get {
            return self.name
        }
        set {
            self.name = newValue
        }
    }

    var description: String {
        get {
            return self.description
        }
        set {
            self.description = newValue
        }
    }

    var price: String {
        get {
            return self.price
        }
        set {
            self.price = newValue
        }
    }

    init(id: Int, name: String, description: String, price: String) {
        self.id = id
        self.name = name
        self.description = description
        self.price = price
    }
}

我的ViewController

import UIKit
import Alamofire
import SwiftyJSON

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        Alamofire.request(.GET, Urls.menu).responseJSON { request in
            if let json = request.result.value {
                let data = JSON(json)

                for (_, subJson): (String, JSON) in data {
                    let product = Products(id: subJson["id"].int!, name: subJson["name"].string!, description: subJson["description"].string!, price: subJson["price"].string!)
                }
            }
        }
    }
}

当我尝试 运行 我的代码时,我在我的模型产品第 14 行收到一个错误:

Thread 1: EX_BAD_ACCESS (code=2, address=0x7fff5e961ff8)

在我的 属性 id 的 setter 中。

我在xcode查看我的错误日志,显示这个setter被调用了超过25万次

谁能知道我做错了什么?

谢谢。

您的代码导致无限循环,因为显式 setter 一次又一次地调用自身。

在 Swift 中,属性是隐式合成的,只需声明它们就足够了。

class Products {
    var id: Int 
    var name: String
    var description: String 
    var price: String 

    init(id: Int, name: String, description: String, price: String) {
        self.id = id
        self.name = name
        self.description = description
        self.price = price
    }
}