在数组中存储数据的问题 - Swift
Issue with storing data within an Array - Swift
我目前的设置如下:
我正在 运行在 Firebase 中查询以提取类型数组中的所有类型,如下所示:
var genresLabelIndex : [String] = ["Horror", "Fiction", "Romance"]
然后我为每个流派创建一个空白数组,以便能够在每个区域中存储流派的信息,如下所示:
var horrorData = [InformationForFeed]()
var fictionData = [InformationForFeed]()
var romanceData = [InformationForFeed]()
InformationForFeed 看起来像这样:
class InformationForFeed {
fileprivate var _uploadKey:String!
fileprivate var _userKey:String!
fileprivate var _imageURL:String!
fileprivate var _socialMedia:[String]
var uploadKey:String!{
return _uploadKey
}
var userKey:String!{
return _userKey
}
var imageURL:String!{
return _imageURL
}
init(dictionary:Dictionary<String,AnyObject>, socials: [String]) {
_socialMedia = socials
if let uploadKey = dictionary["upload_key"] as? String {
self._uploadKey = uploadKey
}
if let userKey = dictionary["user_key"] as? String {
self._userKey = userKey
}
if let imageURL = dictionary["imageUrl"] as? String {
self._imageURL = imageURL
}
}
}
然后我创建一个流派列表数组,如下所示:
1) 首先我创建一个空数组,如下所示:
var genreArrayIndex : [[InformationForFeed]] = []
2) 然后在 UIView 的 init() 中,我设置数组中的内容,如下所示:
genreArrayIndex = [self.horrorData, self.fictionData, self.romanceData]
然后我将 运行 一个名为 getData()
的函数,它将 运行 我的查询并开始存储信息。
我将每个流派的信息存储在 tempArray
中,然后我将 genreArrayIndex[index]
设置为等于 tempArray
,然后清除 tempArray
,如下所示getData
下面。
func getData() {
for genre in genresLabelIndex {
let dbReference = Database.database().reference().child("genres").child(genre)
let query = dbReference.queryLimited(toLast: 6)
query.observeSingleEvent(of: .value, with: { (snapshot : DataSnapshot) in
if snapshot.childrenCount > 0 {
for s in snapshot.children.allObjects as! [DataSnapshot] {
let item = s.value as! Dictionary<String,AnyObject?>
let facebook = (s.childSnapshot(forPath: "social_links").value as? NSDictionary)?["facebook_link"]
let audible = (s.childSnapshot(forPath: "social_links").value as? NSDictionary)?["audible_link"]
let amazon = (s.childSnapshot(forPath: "social_links").value as? NSDictionary)?["amazon_link"]
var socialsArray = [String]()
if facebook != nil {
socialsArray.append(facebook! as! String)
} else {
socialsArray.append("nil")
}
if audible != nil {
socialsArray.append(audible! as! String)
} else {
socialsArray.append("nil")
}
if amazon != nil {
socialsArray.append(amazon! as! String)
} else {
socialsArray.append("nil")
}
let data = InformationForFeed(dictionary: item as Dictionary<String,AnyObject>, socials: socialsArray)
self.newArray.append(data)
}
}
self.genreArrayIndex[self.genreArrayIndexCount] = self.newArray
self.genreArrayIndexCount = self.genreArrayIndexCount + 1
self.newArray.removeAll()
self.internalIndex = self.internalIndex + 1
if self.internalIndex == self.genresLabelIndex.count {
self.tableView.reloadData()
}
})
}
}
我的 tempArray
看起来像这样:
var newArray = [InformationForFeed]()
index
看起来像这样:
var genreArrayIndexCount : Int = 0
问题来了....
所有信息都正确存储在 genreArrayIndex
中......但是...它实际上并没有将信息存储在存储在 genreArrayIndex
中的数组中。
所以换句话说,如果你要 print(self.genreArrayIndex)
它会被完全填充。但是如果你要 print(self.fictionData)
它将是空白的。
我该如何解决这个问题?
数组是值类型。这意味着它的内容是副本。用空 horrorData
(和其他)初始化 genreArrayIndex
,然后用 getData()
填充它不会将数据复制回 horrorData
。我建议删除
genreArrayIndex = [self.horrorData, self.fictionData, self.romanceData]
并用计算属性替换 horrorData
、fictionData
、...。大概是这样。
var horrorData: [InformationFeed] {
return genreArrayIndex[0]
}
我目前的设置如下:
我正在 运行在 Firebase 中查询以提取类型数组中的所有类型,如下所示:
var genresLabelIndex : [String] = ["Horror", "Fiction", "Romance"]
然后我为每个流派创建一个空白数组,以便能够在每个区域中存储流派的信息,如下所示:
var horrorData = [InformationForFeed]()
var fictionData = [InformationForFeed]()
var romanceData = [InformationForFeed]()
InformationForFeed 看起来像这样:
class InformationForFeed {
fileprivate var _uploadKey:String!
fileprivate var _userKey:String!
fileprivate var _imageURL:String!
fileprivate var _socialMedia:[String]
var uploadKey:String!{
return _uploadKey
}
var userKey:String!{
return _userKey
}
var imageURL:String!{
return _imageURL
}
init(dictionary:Dictionary<String,AnyObject>, socials: [String]) {
_socialMedia = socials
if let uploadKey = dictionary["upload_key"] as? String {
self._uploadKey = uploadKey
}
if let userKey = dictionary["user_key"] as? String {
self._userKey = userKey
}
if let imageURL = dictionary["imageUrl"] as? String {
self._imageURL = imageURL
}
}
}
然后我创建一个流派列表数组,如下所示:
1) 首先我创建一个空数组,如下所示:
var genreArrayIndex : [[InformationForFeed]] = []
2) 然后在 UIView 的 init() 中,我设置数组中的内容,如下所示:
genreArrayIndex = [self.horrorData, self.fictionData, self.romanceData]
然后我将 运行 一个名为 getData()
的函数,它将 运行 我的查询并开始存储信息。
我将每个流派的信息存储在 tempArray
中,然后我将 genreArrayIndex[index]
设置为等于 tempArray
,然后清除 tempArray
,如下所示getData
下面。
func getData() {
for genre in genresLabelIndex {
let dbReference = Database.database().reference().child("genres").child(genre)
let query = dbReference.queryLimited(toLast: 6)
query.observeSingleEvent(of: .value, with: { (snapshot : DataSnapshot) in
if snapshot.childrenCount > 0 {
for s in snapshot.children.allObjects as! [DataSnapshot] {
let item = s.value as! Dictionary<String,AnyObject?>
let facebook = (s.childSnapshot(forPath: "social_links").value as? NSDictionary)?["facebook_link"]
let audible = (s.childSnapshot(forPath: "social_links").value as? NSDictionary)?["audible_link"]
let amazon = (s.childSnapshot(forPath: "social_links").value as? NSDictionary)?["amazon_link"]
var socialsArray = [String]()
if facebook != nil {
socialsArray.append(facebook! as! String)
} else {
socialsArray.append("nil")
}
if audible != nil {
socialsArray.append(audible! as! String)
} else {
socialsArray.append("nil")
}
if amazon != nil {
socialsArray.append(amazon! as! String)
} else {
socialsArray.append("nil")
}
let data = InformationForFeed(dictionary: item as Dictionary<String,AnyObject>, socials: socialsArray)
self.newArray.append(data)
}
}
self.genreArrayIndex[self.genreArrayIndexCount] = self.newArray
self.genreArrayIndexCount = self.genreArrayIndexCount + 1
self.newArray.removeAll()
self.internalIndex = self.internalIndex + 1
if self.internalIndex == self.genresLabelIndex.count {
self.tableView.reloadData()
}
})
}
}
我的 tempArray
看起来像这样:
var newArray = [InformationForFeed]()
index
看起来像这样:
var genreArrayIndexCount : Int = 0
问题来了....
所有信息都正确存储在 genreArrayIndex
中......但是...它实际上并没有将信息存储在存储在 genreArrayIndex
中的数组中。
所以换句话说,如果你要 print(self.genreArrayIndex)
它会被完全填充。但是如果你要 print(self.fictionData)
它将是空白的。
我该如何解决这个问题?
数组是值类型。这意味着它的内容是副本。用空 horrorData
(和其他)初始化 genreArrayIndex
,然后用 getData()
填充它不会将数据复制回 horrorData
。我建议删除
genreArrayIndex = [self.horrorData, self.fictionData, self.romanceData]
并用计算属性替换 horrorData
、fictionData
、...。大概是这样。
var horrorData: [InformationFeed] {
return genreArrayIndex[0]
}