swift-上传工具封装并行异步多张上传串行异步按顺序一张张上传

在Swift编程语言中,开发过程中经常会遇到文件上传的需求,尤其是对于移动应用,如照片、视频等多媒体内容的上传。本文将详细讲解如何封装一个上传工具,实现并行异步多张上传以及串行异步按顺序一张张上传的机制。让我们了解“并行异步”与“串行异步”的概念。并行异步是指多个任务同时执行,不等待前一个任务完成就启动下一个任务,这可以充分利用系统资源,提高上传效率。而串行异步则是在一个任务完成之后才开始下一个任务,尽管每个任务本身是异步的,但它们的执行顺序是确定的,这在需要保证顺序性的场景下很有用。在Swift中,我们可以利用GCD(Grand Central Dispatch)或者OperationQueue来实现这两种异步上传策略。 1. **并行异步多张上传**:使用GCD,我们可以创建一个DispatchQueue,并设置其为concurrent类型,然后将每个文件的上传任务作为一个block添加到队列中。这样,所有任务都会并发执行。以下是一个简单的示例: ```swift let uploadQueue = DispatchQueue(label: "uploadQueue", attributes: .concurrent) for file in files { uploadQueue.async { uploadFile(file) { result in //处理上传结果} } } ``` `uploadFile`函数应该包含实际的网络请求,如使用Alamofire或其他HTTP库发起POST请求,将文件作为参数上传。 2. **串行异步按顺序一张张上传**:若要实现串行异步上传,我们同样可以使用GCD,但这次需要一个serial queue,或者使用OperationQueue。以下使用serial queue的示例: ```swift let serialQueue = DispatchQueue(label: "serialQueue") var index = 0 func uploadNext() { if index < files.count { let file = files[index] serialQueue.async { uploadFile(file) { result in //处理上传结果index += 1 uploadNext() } } uploadNext() ```在这个例子中,`uploadNext`函数会按照顺序调用`uploadFile`,并在上传完成后递增索引并触发下一个文件的上传。 3. **使用OperationQueue**: OperationQueue提供了更多的灵活性,比如可以设置依赖关系、取消操作等。创建一个OperationQueue,然后为每张图片创建一个Operation,添加到队列中。以下是一个基础示例: ```swift let operationQueue = OperationQueue() operationQueue.maxConcurrentOperationCount = 1 //限制为串行执行for file in files { let uploadOp = BlockOperation { uploadFile(file) { result in //处理上传结果} } operationQueue.addOperation(uploadOp) } ```这里的`BlockOperation`是自定义操作,执行上传任务。`maxConcurrentOperationCount`设为1确保了按顺序执行。在实际应用中,还需要处理错误、进度更新、取消上传等功能,以及考虑网络状况对上传策略的影响。同时,为了优化用户体验,可以考虑使用NSProgress来展示上传进度,或使用Promise或者Combine框架来处理异步操作的结果。通过合理封装和使用Swift的并发机制,我们可以轻松地构建适应不同需求的文件上传工具,既能够高效地批量上传,也能保证特定场景下的顺序性。
zip
swift-上传工具封装并行异步多张上传串行异步按顺序一张张上传.zip 预估大小:64个文件
folder
YBUploadToolDemo-master 文件夹
folder
YBUploadToolDemoUITests 文件夹
file
Info.plist 701B
file
YBUploadToolDemoUITests.m 1KB
file
1.png 423KB
folder
YBUploadToolDemo.xcodeproj 文件夹
folder
project.xcworkspace 文件夹
file
contents.xcworkspacedata 161B
folder
xcuserdata 文件夹
folder
fengbang.xcuserdatad 文件夹
file
UserInterfaceState.xcuserstate 44KB
folder
wangyingbo.xcuserdatad 文件夹
file
UserInterfaceState.xcuserstate 29KB
folder
xcuserdata 文件夹
folder
fengbang.xcuserdatad 文件夹
folder
xcschemes 文件夹
file
xcschememanagement.plist 339B
folder
wangyingbo.xcuserdatad 文件夹
folder
xcschemes 文件夹
file
xcschememanagement.plist 339B
file
project.pbxproj 34KB
folder
YBUploadToolDemoTests 文件夹
file
Info.plist 701B
file
YBUploadToolDemoTests.m 935B
file
LICENSE 1KB
file
gif.gif 1.3MB
folder
YBUploadToolDemo 文件夹
folder
Tools 文件夹
folder
SelectPhotoManager 文件夹
file
SelectPhotoManager.h 2KB
file
SelectPhotoManager.m 9KB
folder
FBProgressHUD 文件夹
file
FBProgressHUD.h 1KB
file
FBProgressHUD.m 5KB
file
ViewController.m 3KB
file
Header.h 2KB
file
Info.plist 1KB
file
main.m 343B
folder
UploadVC 文件夹
file
FBAttachmentUploadVC.m 10KB
file
FBAttachmentUploadVC.h 283B
folder
Views 文件夹
file
FBAttachmentUploadCollectionViewCell.h 1KB
folder
FBCustomUploadProgress 文件夹
file
FBCustomUploadProgress.h 534B
file
FBCustomUploadProgress.m 3KB
file
FBAttachmentUploadCollectionViewCell.m 4KB
folder
Base.lproj 文件夹
file
LaunchScreen.storyboard 2KB
file
Main.storyboard 3KB
file
ViewController.h 224B
file
AppDelegate.h 286B
folder
YBUploadTool 文件夹
file
FBUploadTool.m 6KB
file
FBUploadTool.h 1KB
file
FBBasicUploadModel.m 2KB
file
FBBasicUploadModel.h 2KB
folder
Assets.xcassets 文件夹
folder
timg.imageset 文件夹
file
Contents.json 176B
file
timg.jpeg 8KB
folder
empty_placeholder_img.imageset 文件夹
file
empty_placeholder_img@2x.png 20KB
file
Contents.json 195B
folder
add_attachment_icon.imageset 文件夹
file
add_attachment_icon@2x.png 2KB
file
add_attachment_icon@3x.png 3KB
file
Contents.json 305B
folder
clean_attachment_icon.imageset 文件夹
file
clean_attachment_icon@3x.png 2KB
file
Contents.json 309B
file
clean_attachment_icon@2x.png 1KB
folder
AppIcon.appiconset 文件夹
file
Contents.json 2KB
file
Contents.json 62B
folder
Categories 文件夹
file
UIViewController+BackButtonHandler.h 459B
file
NSString+KVAdditional.h 285B
file
NSString+KVAdditional.m 1KB
file
UIColor+Hex.h 726B
file
UIViewController+YBNaviAttributes.m 2KB
file
UIColor+Hex.m 3KB
file
UIViewController+BackButtonHandler.m 1KB
file
UIView+KVAdditional.m 1KB
file
NSString+FBAdditional.h 454B
folder
YBLoadingView 文件夹
file
UIView+YBLoading.m 1KB
file
UIView+YBLoading.h 442B
file
UIView+KVAdditional.h 488B
file
UIViewController+YBNaviAttributes.h 1KB
file
NSString+FBAdditional.m 1KB
file
AppDelegate.m 2KB
file
README.md 2KB
file
.gitignore 1KB
...
zip 文件大小:1.62MB