所以我试图通过查询将信息上传到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()
答案 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]]
。