尝试使用Json数据创建对象

时间:2015-10-16 03:18:05

标签: ios json swift swifty-json

我正在研究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行:

  

线程1:EX_BAD_ACCESS(代码= 2,地址= 0x7fff5e961ff8)

在我的属性ID的设置器中。

我在xcode中检查我的错误日志,它显示这个setter被调用超过25万次。

谁能知道我做错了什么?

谢谢。

1 个答案:

答案 0 :(得分:2)

您的代码会导致无限循环,因为显式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
    }
}