如何从转义闭包中获取数据到 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()
}

 }