在 iOS 开发中,可以使用 Objective-C 来下载文件,并且可以显示下载的进度。以下是一个简单的示例代码:

首先,需要导入'Foundation' 和 'UIKit' 框架:

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

然后,创建一个类来处理文件下载和进度更新的功能。在类的头文件中定义代理方法:

@protocol FileDownloaderDelegate <NSObject>

- (void)downloadProgress:(CGFloat)progress;
- (void)downloadFinished;

@end

@interface FileDownloader : NSObject <NSURLSessionDelegate>

@property (nonatomic, weak) id<FileDownloaderDelegate> delegate;

- (void)downloadFileFromURL:(NSURL *)url;

@end

在类的实现文件中,添加下载文件和进度更新的逻辑:

@interface FileDownloader ()

@property (nonatomic, strong) NSURLSessionDownloadTask *downloadTask;

@end

@implementation FileDownloader

- (void)downloadFileFromURL:(NSURL *)url {
    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
    
    self.downloadTask = [session downloadTaskWithURL:url];
    [self.downloadTask resume];
}

#pragma mark - NSURLSessionDelegate

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location {
    // 下载完成后的处理,例如保存文件到本地
    // ...
    
    dispatch_async(dispatch_get_main_queue(), ^{ 
        [self.delegate downloadFinished];
    });
}

- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite {
    CGFloat progress = (CGFloat)totalBytesWritten / totalBytesExpectedToWrite;
    
    dispatch_async(dispatch_get_main_queue(), ^{ 
        [self.delegate downloadProgress:progress];
    });
}

@end

最后,可以在需要下载文件的地方使用上述类来执行下载操作,并实现代理方法来更新进度:

@interface ViewController () <FileDownloaderDelegate>

@property (nonatomic, strong) FileDownloader *fileDownloader;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.fileDownloader = [[FileDownloader alloc] init];
    self.fileDownloader.delegate = self;
    
    NSURL *downloadURL = [NSURL URLWithString:@'http://example.com/file.zip'];
    [self.fileDownloader downloadFileFromURL:downloadURL];
}

#pragma mark - FileDownloaderDelegate

- (void)downloadProgress:(CGFloat)progress {
    // 在这里更新下载进度的UI显示
    // ...
}

- (void)downloadFinished {
    // 下载完成后的处理
    // ...
}

@end

以上代码中,'FileDownloader' 类使用 'NSURLSession' 来执行文件下载任务,并在代理方法中更新下载进度和处理下载完成后的操作。在需要下载文件的地方,创建一个 'FileDownloader' 实例,并设置代理对象为当前视图控制器,然后调用 'downloadFileFromURL:' 方法开始下载文件。在代理方法中可以更新UI显示下载进度和处理下载完成后的操作。

请注意,以上代码仅为示例,实际使用时可能需要根据具体需求进行修改和调整。


原文地址: https://www.cveoy.top/t/topic/pmx3 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录