arrays - 用数组存储数组 - Swift

标签 arrays swift debugging object swift3

所以我试图通过查询将信息上传到 Firebase,但我在某些逻辑上遇到了困难。我的问题是,当我尝试将我创建的对象存储到数组中时,我收到一条错误消息,提示我无法使用 [any] 下标 [[any]]。现在我想要完成的,不是一堆 if-else 语句,而是使用 for 循环来运行我应该将对象放置在哪个数据数组中。我只是对如何正确附加它有点困惑,希望得到帮助!

我的错误是“无法使用 Any 类型的索引下标 [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()

最佳答案

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

for i in (self.allGenresData) {

但是,您随后将 i 视为数组的索引:

self.allGenresData[i].append(data)

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

for i in self.allGenresData.indices {

i 变量应该适用于下标数组。

关于arrays - 用数组存储数组 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46044867/

相关文章:

c++ - 数组:左旋转 |破解编码面试Hacker Rank - (因超时而终止)

ios - 使用 SpriteKit 创建一条直线

ios - 将多个请求合并为一个。可观察数组转化为数组的可观察数组

swift - 我的自定义 UICollectionViewCell 中的图像没有扩展到单元格的整个边界?

java - 找不到java中存在的图像文件

java - Android:如何拥有 ArrayList<HashMap<String, String>> 类型的数组

c - 程序无法从文本文件中正确读取

c++ - 使用 std::distance 来初始化 const 成员有时会出错

python-3.x - 当变量取某个值时,如何使 PyCharm 中断?

C++:为什么这个字符串输入失败而另一个没有