如何从转义闭包中获取数据到 UICollectionview 中?
How to get data from escaping closure into UICollectionview?
我正在从 S3 存储桶下载数据以填充 UIcollectionview table。我知道我必须使用转义闭包来使用数据,但我仍然无法将数据放入我的集合视图中。在下面的代码中,我的单元格计数仍然是 returns 0,而不是文件的实际数量,即 2。如何将数据放入 UIcollectionview 代码中?代码如下:
func listFiles(completionHandler: @escaping (Array<String>) -> ()){
var audioFileArray: [String] = []
resultSink = Amplify.Storage.list()
.resultPublisher
.sink {
if case let .failure(storageError) = [=10=] {
print("Failed: \(storageError.errorDescription). \(storageError.recoverySuggestion)")
}
}
receiveValue: { listResult in
print("Completed")
listResult.items.forEach { item in
audioFileArray.append(item.key)
}
for audio in audioFileArray{
self.dowloadAudioFileName(audioFiles: audio)
}
completionHandler(audioFileArray)
print("The audio files are: \(audioFileArray)")
}
self.soundBoardView.reloadData()
}
var globalAudioFileArray: [String] = []
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
listFiles(){ (audioFileArray) in
self.globalAudioFileArray = audioFileArray
}
return globalAudioFileArray.count
}
为什么您在 numberOfItemsIn 部分 func 上获取数据?
此外,当您设置数组不是列表文件函数的末尾时,您需要重新加载集合视图。
你应该像下面这样在单独的函数中获取它们,你可以在 viewDidLoad 中调用它;
func getData() {
listFiles(){ (audioFileArray) in
self.globalAudioFileArray = audioFileArray
self.soundBoardView.reloadData()
}
}
我正在从 S3 存储桶下载数据以填充 UIcollectionview table。我知道我必须使用转义闭包来使用数据,但我仍然无法将数据放入我的集合视图中。在下面的代码中,我的单元格计数仍然是 returns 0,而不是文件的实际数量,即 2。如何将数据放入 UIcollectionview 代码中?代码如下:
func listFiles(completionHandler: @escaping (Array<String>) -> ()){
var audioFileArray: [String] = []
resultSink = Amplify.Storage.list()
.resultPublisher
.sink {
if case let .failure(storageError) = [=10=] {
print("Failed: \(storageError.errorDescription). \(storageError.recoverySuggestion)")
}
}
receiveValue: { listResult in
print("Completed")
listResult.items.forEach { item in
audioFileArray.append(item.key)
}
for audio in audioFileArray{
self.dowloadAudioFileName(audioFiles: audio)
}
completionHandler(audioFileArray)
print("The audio files are: \(audioFileArray)")
}
self.soundBoardView.reloadData()
}
var globalAudioFileArray: [String] = []
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
listFiles(){ (audioFileArray) in
self.globalAudioFileArray = audioFileArray
}
return globalAudioFileArray.count
}
为什么您在 numberOfItemsIn 部分 func 上获取数据? 此外,当您设置数组不是列表文件函数的末尾时,您需要重新加载集合视图。
你应该像下面这样在单独的函数中获取它们,你可以在 viewDidLoad 中调用它;
func getData() {
listFiles(){ (audioFileArray) in
self.globalAudioFileArray = audioFileArray
self.soundBoardView.reloadData()
}
}