Swift - 数组不会在闭包中追加(数据)
Swift - Array won't .append(data) in closure
我确定我错过了一些明显的东西。
我想使用 Parse Server 将请求中的一些数据填充到字典中。
query.findObjectsInBackgroundWithBlock { (books, error) in
guard (books != nil) else {
print(error)
return
}
for book in books! {
print("\n\n\(book)") //#1 Got some book
if let coverString = book["cover"] {
print("coverString OK : \(coverString)") //#2 got a valid String
self.bookImages.append(coverString as? String)
} else {
print("coverString nil")
self.bookImages.append(nil)
}
}
}
如果我 : print("Tableau image: \(bookImages)\n")
我的 var bookImages = [String?]()
里什么也没有,即使我里面有东西 coverString
#2.
但是如果我 .append("foobar") 除了闭包之外的任何其他地方(尝试)我的字典不是空的。
为什么会有这种奇怪的魔法?
findObjectsInBackgroundWithBlock
是一个异步操作。
所以您的数组(.append
用于数组,而不是字典)可能已正确填充,但您正在查看它时尚未填充尚未。
如果将 print
语句 放在 闭包中,您将看到结果。
并且您还应该在那里重新加载 TableView,但将其重新分派到主线程。
示例:
query.findObjectsInBackgroundWithBlock { (books, error) in
guard (books != nil) else {
print(error)
return
}
for book in books! {
if let coverString = book["cover"] {
print("coverString OK : \(coverString)")
self.bookImages.append(coverString as? String)
} else {
print("coverString nil")
self.bookImages.append(nil)
}
if let titleString = book["title"] {
print("titleString OK : \(titleString)")
self.bookTitle.append(titleString as? String)
} else {
print("titleString nil")
self.bookTitle.append("No Title")
}
}
print("Tableau image2: \(self.bookImages)\n")
print("Tableau title2: \(self.bookTitle)\n")
dispatch_async(dispatch_get_main_queue()) {
self.collectionView?.reloadData()
}
}
我确定我错过了一些明显的东西。
我想使用 Parse Server 将请求中的一些数据填充到字典中。
query.findObjectsInBackgroundWithBlock { (books, error) in
guard (books != nil) else {
print(error)
return
}
for book in books! {
print("\n\n\(book)") //#1 Got some book
if let coverString = book["cover"] {
print("coverString OK : \(coverString)") //#2 got a valid String
self.bookImages.append(coverString as? String)
} else {
print("coverString nil")
self.bookImages.append(nil)
}
}
}
如果我 : print("Tableau image: \(bookImages)\n")
我的 var bookImages = [String?]()
里什么也没有,即使我里面有东西 coverString
#2.
但是如果我 .append("foobar") 除了闭包之外的任何其他地方(尝试)我的字典不是空的。
为什么会有这种奇怪的魔法?
findObjectsInBackgroundWithBlock
是一个异步操作。
所以您的数组(.append
用于数组,而不是字典)可能已正确填充,但您正在查看它时尚未填充尚未。
如果将 print
语句 放在 闭包中,您将看到结果。
并且您还应该在那里重新加载 TableView,但将其重新分派到主线程。
示例:
query.findObjectsInBackgroundWithBlock { (books, error) in
guard (books != nil) else {
print(error)
return
}
for book in books! {
if let coverString = book["cover"] {
print("coverString OK : \(coverString)")
self.bookImages.append(coverString as? String)
} else {
print("coverString nil")
self.bookImages.append(nil)
}
if let titleString = book["title"] {
print("titleString OK : \(titleString)")
self.bookTitle.append(titleString as? String)
} else {
print("titleString nil")
self.bookTitle.append("No Title")
}
}
print("Tableau image2: \(self.bookImages)\n")
print("Tableau title2: \(self.bookTitle)\n")
dispatch_async(dispatch_get_main_queue()) {
self.collectionView?.reloadData()
}
}