使用数组存储数组 - Swift

时间:2017-09-04 22:52:18

标签: arrays swift debugging object swift3

所以我试图通过查询将信息上传到Firebase,而我却陷入了一些逻辑。我的问题是,当我尝试将我创建的对象存储到一个数组中时,我收到的错误是我不能用[any]下标[[any]]。现在我想要完成的是,而不是有一堆if-else语句,使用for循环来运行我应该放置对象的数据数组。我只是觉得我应该如何正确地追加它,并且非常喜欢这个帮助!

我的错误是"Cannot subscript a value of type [Any] with an index of type Any"

以下是我的数据结构:

/** Setting up the Data **/

    var genresLabelIndex = ["Fiction", "Poetry", "NonFiction", "Science"]

    var fiction = [InformationForFeed]()
    var poetry = [InformationForFeed]()
    var nonFiction = [InformationForFeed]()
    var science = [InformationForFeed]()
    var allGenresData = [[Any]]()

    func getData() {



        for genre in genresLabelIndex {

            let dbReference = FIRDatabase.database().reference().child("genres").child(genre)
            let query = dbReference.queryOrderedByKey().queryLimited(toFirst: 3)

            query.observeSingleEvent(of: .value, with: { (snapshot : FIRDataSnapshot) in

                if snapshot.childrenCount > 0 {

                    for snap in snapshot.children.allObjects as! [FIRDataSnapshot] {

                        let item = snap.value as! Dictionary<String,AnyObject?>
                        let data = InformationForFeed(dictionary: item as Dictionary<String,AnyObject>)
                        for i in (self.allGenresData) {
                            self.allGenresData[i].append(data)
                        }
                    }
                } else {
                    print("This snap shot doesnt have any data")
                }
            })
        }

        print(allGenresData)

    }

我的错误在第self.allGenresData[i].append(data)行 在我的Init()中,我正在做以下事情:

allGenresData = [self.fiction, self.poetry, self.nonFiction, self.science]
getData()

2 个答案:

答案 0 :(得分:1)

您的问题是您将allGenresData的每个元素存储在变量i中:

for i in (self.allGenresData) {

然而,您正在将i视为数组的索引:

self.allGenresData[i].append(data)

不幸的是i这里包含子数组本身,而不是索引。要解决此问题,您需要将i分配给数组中的实际索引。你可以这样做:

for i in self.allGenresData.indices {

i变量应该适合下标数组。

答案 1 :(得分:0)

请试试这个:

var dataArray = [InformationForFeed]()
let data = InformationForFeed(dictionary: item as Dictionary<String,AnyObject>)
dataArray.append(data)
for i in (self.allGenresData) {
    self.allGenresData[i].append(dataArray)
}

*您正试图将InformationForFeed放入[[InformationForFeed]]