我正在从S3存储桶下载数据,以填充UIcollectionview表。我知道我必须使用转义闭包来使用数据,但我仍然无法将数据放入我的集合视图中。在下面的代码中,我的单元格计数仍然返回0,而不是文件的实际数量,即2。如何将数据导入UIcollectionview代码?以下代码:
func listFiles(completionHandler: @escaping (Array<String>) -> ()){
var audioFileArray: [String] = []
resultSink = Amplify.Storage.list()
.resultPublisher
.sink {
if case let .failure(storageError) = $0 {
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
}
为什么要获取函数部分中numberOfItems的数据?此外,当您设置数组而不是列表文件函数的末尾时,还需要重新加载集合视图。
你应该把它们放在下面这样的单独函数中,你可以在viewDidLoad中调用它;
func getData() {
listFiles(){ (audioFileArray) in
self.globalAudioFileArray = audioFileArray
self.soundBoardView.reloadData()
}
}