gpt4 book ai didi

ios - 如何使用 Swift 4 避免文件上传重复

转载 作者:行者123 更新时间:2023-11-28 05:51:49 25 4
gpt4 key购买 nike

我正在尝试将文件上传到 AWS S3。我从 iCloud 中选择并附加到 array 中的文件,以便在 tableView 中列出并同时调用 AWS S3 上传 函数.

在这里,一旦文件上传成功,我需要在 array 中做一些识别,因为每当我尝试上传下一个 file 时,我的数组再次推送已经存储的 文件。因此,上传过程给出了 duplication 结果。如何避免这个问题?

如果我从数组中删除上传的文件 url,我将无法在 tableView 中列出,但如果我没有删除,那么它将是 re-uploading 每当我尝试上传新文件时。

// Array declaration
var items = [Item]()
var fileArray = [Item]()

// Values appending into my array
items.append(Item(indexPath: indexPath, file: item.url))

// TableView data-load
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CustomTableViewCell
let item = fileArray[indexPath.row]

if fileArray.count > 0 {
cell.url_label.text = item.url

// Upload function call
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: {
self.uploadData(indexPath: indexPath, file: item.url)
})
}
return cell
}

// Upload function with parameters
private func uploadData(indexPath: indexPath, file: item.url) {

// Tracking each cell and it's file.
// Once, file uploaded I am doing some changes in tableview cell
}

最佳答案

1- 你不应该在里面做任何非 ui 的任务

DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: {

2- 您不应该在 cellForRowAt 中上传文件,因为每次滚动都会调用它,所以您肯定会遇到重复,如果您只想对可见单元格执行此操作,则在数组内部模型创建类型为 Enum 的状态属性以指示此文件的当前状态 -> NotUploaded-Uploaded-Uploading 并在上传前检查它


Enum Status {
case notUploaded,uploaded,uploading
}

class Item {
var st:Status = .notUploaded
func upload () {
if st == .notUploaded {
st =.uploading
// upload here
API.upload {
self.st = .uploaded
}
}
}
}

关于ios - 如何使用 Swift 4 避免文件上传重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52679404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com