所以我试图通过查询将信息上传到 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/