首页 > 解决方案 > 来自数据模型的对象中的数组为零

问题描述

我有一个名为 Coupon 的模型类,它有一个名为 Array 的对象数组!当我从 Coupon 类创建一个对象时,该对象内部的数组为零,并且出现错误。我究竟做错了什么?

class Coupon {
    private var _date: String!
    private var _editor: String!
    private var _predictions: Array<Prediction>?

var date: String {
    get {
        return _date
    }
}

var editor: String {
    get {
        return _editor
    }
}

var predictions: Array<Prediction>? {
    get {
        return _predictions
    }
    set {
        self._predictions = predictions
    }
}
}

控制器如下: c.predictions![0] 给出 nil 错误

let ref = DataService.ds.REF_COUPONS.queryOrdered(byChild: "date")
    ref.observe(.childAdded, with: { (snapshot) in

        if let couponDict = snapshot.value as? Dictionary<String, AnyObject> {
            let c_key = snapshot.key
            let c = Coupon(couponKey: c_key, couponData: couponDict)
            let childSnapShot = snapshot.childSnapshot(forPath: "predictions")
            if let snapshots = childSnapShot.children.allObjects as? [FIRDataSnapshot] {

                for snap in snapshots{

                    let p_key = snap.key
                    let p = Prediction(predictionKey: p_key, predictionData: snap.value as! Dictionary<String, AnyObject>)
                    self.predictions.append(p) 
                    c.predictions![0] = self.predictions[0] <--- ERROR LINE
                }
            }
            self.coupons.append(c)
        }
        self.couponsTableView.reloadData()
    })

标签: iosswiftobjectdatamodel

解决方案


因为它的值是nil默认值。所以predictions!会导致trying to unwrap an optional whose value is nil某种错误。

您应该在那里创建新数组:

c.predictions = [self.predictions[0]]

也不需要在 swift 中支持字段。您的Coupon课程可以简化为:

class Coupon {
    private(set) var date: String!
    private(set) var editor: String!
    var predictions: Array<Prediction>?
}

private(set)表示该值只能在该类中设置。

预测的定义行var predictions: Array<Prediction>?可以替换为空数组的默认值:

class Coupon {
    private(set) var date: String!
    private(set) var editor: String!
    var predictions: [Prediction] = []
}

[Prediction]Array<Prediction>

一旦它具有空数组的默认值而不是创建新数组,您就可以安全地附加到它:

c.predictions.append(self.predictions[0])

另请注意,c.predictions[0] = self.predictions[0]即使在这种情况下,您的代码也永远不会工作,因为数组默认为空,没有0元素。


推荐阅读