ConvenientFileManager 4.0.2

ConvenientFileManager 4.0.2

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布最后发布2018年3月
SPM支持SPM

William Boles 维护。



  • William Boles

Build Status Version License Platform CocoaPods

ConvenientFileManager是一组分类,以简化使用(NS)FileManager完成常见任务。

通过CocoaPods安装

要通过CocoaPods将ConvenientFileManager集成到您的Xcode项目中,请在您的Podfile中指定它

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'

pod 'ConvenientFileManager'

然后,运行以下命令

$ pod install

需要CocoaPods 0.39.0+ 来构建ConvenientFileManager。

使用方法

ConvenientFileManager为您应用程序的沙盒中的DocumentsFileManager+Documents)和CacheFileManager+Cache)目录提供了一系列便利方法。这些扩展/分类提供了一套简化的接口,用于从这些目录中读取、写入和删除数据,比(NS)FileManager提供的接口更易于使用,通过减少了关于您正在使用哪个目录的样板代码。

即使您已经有了读取、写入或删除数据的绝对路径,您也可以通过使用FileManager+Persistence访问相同的方法集。

写入/保存

Swift
func writeImageToDisk(image: UIImage) {
    if let imageData = UIImagePNGRepresentation(image) {
        switch self.media.location.integerValue {
        case .cache:
            FileManager.writeToCacheDirectory(data: imageData, relativePath: self.media.name)
        case .documents:
            FileManager.writeDataToDocumentsDirectory(data: imageData, relativePath: self.media.name)
        }
    }
}
Objective-C
- (void)writeImageToDisk:(UIImage *)image
{
    NSData *imageData = UIImagePNGRepresentation(image);

    switch (self.media.location.integerValue)
    {
        case CFEMediaLocationCache:
        {
            [NSFileManager cfm_writeData:imageData toCacheDirectoryWithRelativePath:self.media.name];

            break;
        }
        case CFEMediaLocationDocuments:
        {
            [NSFileManager cfm_writeData:imageData toDocumentsDirectoryWithRelativePath:self.media.name];

            break;
        }
    }
}

检索

Swift
func retrieveImageFromMedia(media: CFEMedia) -> UIImage? {
    var retrievedData: NSData?

    switch media.location.integerValue {
    case .cache:
        retrievedData = FileManager.retrieveDataFromCacheDirectory(relativePath: media.name)
    case .documents:
        retrievedData = FileManager.retrieveDataFromDocumentsDirectory(relativePath: media.name)
    }

    guard let unwrappedRetrievedData = retrievedData else {
        return nil
    }

    return UIImage.init(data: unwrappedRetrievedData)
}
Objective-C
- (UIImage *)retrieveImageFromMedia:(CFEMedia *)media
{
    NSData *imageData = nil;

    switch (media.location.integerValue)
    {
        case CFEMediaLocationCache:
        {
            imageData = [NSFileManager cfm_retrieveDataFromCacheDirectoryWithRelativePath:media.name];

            break;
        }
        case CFEMediaLocationDocuments:
        {
            imageData = [NSFileManager cfm_retrieveDataFromDocumentsDirectoryWithRelativePath:media.name];

            break;
        }
    }

    return [[UIImage alloc] initWithData:imageData];
}

删除

Swift
func trashButtonPressed(sender: UIBarButtonItem) {
    switch self.media.location.integerValue {
    case .cache:
        FileManager.deleteDataFromCacheDirectory(relativePath: self.media.name)
    case .documents:
        FileManager.deleteDataFromDocumentsDirectory(relativePath: self.media.name)
    }
}
Objective-C
- (void)trashButtonPressed:(UIBarButtonItem *)sender
{
    switch (self.media.location.integerValue)
    {
        case CFEMediaLocationCache:
        {
            [NSFileManager cfm_deleteDataFromCacheDirectoryWithRelativePath:self.media.name];

            break;
        }
        case CFEMediaLocationDocuments:
        {
            [NSFileManager cfm_deleteDataFromDocumentDirectoryWithRelativePath:self.media.name];

            break;
        }
    }
}

存在

同步地

Swift
func mediaAssetHasBeenDownloaded(media: CFEMedia) -> Bool {
    var mediaAssetHasBeenDownloaded = false

    switch self.media.location.integerValue {
    case .cache:
        mediaAssetHasBeenDownloaded = FileManager.fileExistsInCacheDirectory(relativePath: self.media.name)
    case .documents:
        mediaAssetHasBeenDownloaded = FileManager.fileExistsInDocumentsDirectory(relativePath: self.media.name)
    }

    return mediaAssetHasBeenDownloaded
}
Objective-C
- (BOOL)mediaAssetHasBeenDownloaded:(CFEMedia *)media
{
	BOOL mediaAssetHasBeenDownloaded = NO;

    switch (self.media.location.integerValue)
    {
        case CFEMediaLocationCache:
        {
            mediaAssetHasBeenDownloaded = [NSFileManager cfm_fileExistsInCacheDirectoryWithRelativePath:self.media.name];

            break;
        }
        case CFEMediaLocationDocuments:
        {
            mediaAssetHasBeenDownloaded = [NSFileManager cfm_fileExistsInCacheDirectoryWithRelativePath:self.media.name];

            break;
        }
    }

    return mediaAssetHasBeenDownloaded;
}

异步地

Swift
FileManager.fileExistsAtPath(absolutePath: self.media.absoluteLocalPath) { (fileExists) in
    if (!fileExists) {
        //Yay!
    } else {
        //Boo!
    }
}
Objective-C
[NSFileManager cfm_fileExistsAtAbsolutePath:self.media.absoluteLocalPath
                                 completion:^(BOOL fileExists)
 {
     if (!fileExists)
     {   
        //Yay!
     }
     else
     {
        //Boo!
     }
 }];

ConvenientFileManager附带了示例项目,提供了比上述更多细节。

ConvenientFileManager使用模块来导入/使用框架 - 您需要在项目中启用此功能。

##发现了问题?

如果有针对ConvenientFileManager的特定问题、功能请求或想发表评论,请在这里创建新问题。请注意,有关NSFileManager的一般问题应在Stack Overflow上提出。

鼓励并非常感激合并请求! 请尽量保持与现有代码风格的统一。如果您考虑对项目进行重大更改或增加,请提前通过新建问题进行沟通。这样可以让大家同步即将到来的更改,确保更改与项目的设计理念相符,并避免重复工作。