FileManager/本地文件增删改查, Cache/图像缓存处理 的操作

1. FileManager 本地文件管理器,增删改查文件

  1.1 实现

// 本地文件管理器
class LocalFileManager{// 单例模式static let instance = LocalFileManager()let folderName = "MyApp_Images"init() {createFolderIfNeeded()}// 创建特定应用的文件夹func createFolderIfNeeded(){// 创建文件夹路径guard let path = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first?.appendingPathComponent(folderName).path else {return}// 判断文件夹是否存在,不存在,则创建文件夹路径if !FileManager.default.fileExists(atPath: path){do {try FileManager.default.createDirectory(atPath: path, withIntermediateDirectories: true)print("Success create folder.")} catch let error {print("Error creating folder. \(error)")}}}// 删除特定应用的文件夹func deleteFolder(){// 创建文件夹路径guard let path = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first?.appendingPathComponent(folderName).path else {return}do {try FileManager.default.removeItem(atPath: path)print("Success deleting filder.")} catch let error {print("Error deleting folder. \(error)")}}// 保存图片func saveImage(image: UIImage, name: String) -> String{// 压缩图片质量//image.jpegData(compressionQuality: 1.0)// 获取数据和文件路径guardlet data =  image.pngData(),let path = getPathForImage(name: name)else{return "Error getting data."}do{// 文件写入数据try data.write(to: path)return "Success saving."}catch let error{return "Error saving: \(error.localizedDescription)"}}// 获取图片func getImage(name: String) -> UIImage?{// 获取文件路径 absoluteString,并检查文件是否存在guard let path = getPathForImage(name: name)?.path,FileManager.default.fileExists(atPath: path) else{print("Error getting path.")return nil}return UIImage(contentsOfFile: path)}// 删除图片func deleteImage(name: String) -> String{// 获取文件路径,并检查文件是否存在guard let path = getPathForImage(name: name)?.path,FileManager.default.fileExists(atPath: path) else{return "Error getting path."}do {// 删除文件try FileManager.default.removeItem(atPath: path)return "Successfully deleted."} catch let error {return "Error deleting image: \(error)"}}// 获取文件路径func getPathForImage(name: String) -> URL?{// 文档目录//let directory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)// 缓存目录//let directory2 = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first// 临时目录//let directory3 = FileManager.default.temporaryDirectory// 拼接路径//let path = directory2?.appendingPathComponent("\(name).png")guardlet path = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first?.appendingPathComponent(folderName).appendingPathComponent("\(name).png") else {print("Error getting data.")return nil}print(path)return path}
}class FileManagerViewModel: ObservableObject{@Published var image: UIImage? = nillet imageName: String = "steve-jobs"let localManager  = LocalFileManager.instance@Published var infoMessage: String  = ""init() {getImageFromAssetsFoler()//getImageFromFileManager()}// 获取图片,在资源目录func getImageFromAssetsFoler(){image = UIImage(named: imageName)}// 获取图像,文件管理器func getImageFromFileManager(){image = localManager.getImage(name: imageName)}// 保存图像func saveImage(){guard let image = image else { return }infoMessage = localManager.saveImage(image: image, name: imageName)}// 删除图像func deleteImage(){infoMessage = localManager.deleteImage(name: imageName)localManager.deleteFolder()}
}/// 文件管理器
struct FileManagerBootcamp: View {@StateObject var viewModel = FileManagerViewModel()var body: some View {NavigationView {VStack {if let image = viewModel.image {Image(uiImage: image).resizable().scaledToFill().frame(width: 200, height: 200).clipped().cornerRadius(10)}HStack {Button {viewModel.saveImage()} label: {Text("Save to Fm").font(.headline).foregroundColor(.white).padding().padding(.horizontal).background(Color.accentColor).cornerRadius(10)}Button {viewModel.deleteImage()} label: {Text("Delete from Fm").font(.headline).foregroundColor(.white).padding().padding(.horizontal).background(Color.red).cornerRadius(10)}}Text(viewModel.infoMessage).font(.largeTitle).fontWeight(.semibold).foregroundColor(.purple)//.padding(.top, 20)Spacer()}.navigationTitle("File Manager")}}
}

  1.2 效果图

2. Cache 图像缓存处理操作

  2.1 实现

// 缓存管理器
class CacheManager {// 单例模式static let instance = CacheManager()private init() {}// 计算型属性 图像缓存var imageCache: NSCache<NSString, UIImage> = {let cache = NSCache<NSString, UIImage>()// 容纳最大对象的数量cache.countLimit = 100// 容纳最大值cache.totalCostLimit = 1024 * 1024 * 100 // 100mbreturn cache}()// 添加图像func add(image: UIImage, name: String) -> String{imageCache.setObject(image, forKey: name as NSString)return "Added to cache!"}// 移除图像func remove(name: String) -> String{imageCache.removeObject(forKey: name as NSString)return "Removed from cache"}// 获取图像func get(name: String) -> UIImage?{return imageCache.object(forKey: name as NSString)}
}// 缓存 ViewModel
class CacheViewModel: ObservableObject{@Published var startingImage: UIImage? = nil@Published var cachedImage: UIImage? = nil@Published var infoMessage: String = ""let imageName = "steve-jobs"let manager = CacheManager.instanceinit() {getImageFromAssetsFolder()}// 获取资源文件中图像func getImageFromAssetsFolder(){startingImage = UIImage(named: imageName)}// 保存图像func saveToCache(){guard let image = startingImage else { return }infoMessage = manager.add(image: image, name: imageName)}// 移除图像func removeFromCache(){infoMessage = manager.remove(name: imageName)}// 获取缓存图像func getFromCache(){if let returnedImage = manager.get(name: imageName){cachedImage = returnedImageinfoMessage = "Got image from cache"}else{cachedImage = nilinfoMessage = "Image not found in cache"}}
}// 缓存管理
struct CacheBootcamp: View {@StateObject var viewModel = CacheViewModel()var body: some View {NavigationView {VStack {if let image = viewModel.startingImage{Image(uiImage: image).resizable().scaledToFill().frame(width: 200, height: 200).clipped().cornerRadius(10)}Text(viewModel.infoMessage).font(.largeTitle).fontWeight(.semibold).foregroundColor(Color.purple)HStack {Button {viewModel.saveToCache()} label: {Text("Save to Cache").font(.headline).foregroundColor(.white).padding().background(Color.accentColor).cornerRadius(10)}Button {viewModel.removeFromCache()} label: {Text("Delete from Cache").font(.headline).foregroundColor(.white).padding().background(Color.red).cornerRadius(10)}}Button {viewModel.getFromCache()} label: {Text("Get from Cache").font(.headline).foregroundColor(.white).padding().background(Color.green).cornerRadius(10)}if let image = viewModel.cachedImage{Image(uiImage: image).resizable().scaledToFill().frame(width: 200, height: 200).clipped().cornerRadius(10)}Spacer()}.navigationTitle("Cache Bootcamp")}}
}

  2.2 效果图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/90228.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu22.04使用共享文件设置

从ubuntu20.04开始&#xff0c;设置共享文件就很麻烦 第一步&#xff1a; 安装samba&#xff1a; sudo apt install samba第二步; 创建一个共享文件夹 我以桌面Desktop为例子 第三步&#xff1a; 设置密码&#xff1a; sudo smbpasswd -a ygc第四步&#xff1a; sudo vim …

贪心算法-点灯问题

1、题目描述 给定一个字符串str&#xff0c;只由 ‘X’ 和 ‘.’ 两种字符构成。‘X’ 表示墙&#xff0c;不能放灯&#xff0c;点亮不点亮都可&#xff1b;’.’ 表示居民点&#xff0c;可以放灯&#xff0c;需要点亮。如果灯放在i位置&#xff0c;可以让 i-1&#xff0c;i 和…

WordPress主题开发( 十二)之—— 主题的functions.php

WordPress主题开发&#xff08; 十&#xff09;之—— 主题的functions.php 介绍使用functions.php vs. 插件创建和使用functions.php在functions.php中的常见用途1. 使用WordPress钩子2. 启用WordPress功能3. 定义可重用的函数4. 添加自动Feed链接5. 自定义导航菜单6. 文本域加…

IP归属地应用的几个主要特点

作为一款优秀的IP地址定位工具&#xff0c;主题IP归属地的应用无疑是最好的选择之一。该应用可以将您需要查询的IP地址快速定位到所在的具体物理位置&#xff0c;并提供详细的地址和地图信息。接下来&#xff0c;让我们一起来看一看IP归属地应用的几个主要特点&#xff1a; 1. …

Vulkan-着色器及编译SPIR-V

1.着色器模块介绍 Vulkan着色器代码一定要用字节码格式&#xff0c;而不是人类可读的语法如GLSL和HLSL。这个字节码就是SPIR-V&#xff0c;设计用于Vulkan和OpenCL。这是一个可以用于编写图形和计算着色器的格式&#xff0c;但是我们主要关注的是Vulkan的图形管线。使用字节码格…

数学建模常用模型

作为数学建模的编程手还掌握一些各类模型常用算法&#xff0c;数学建模评价类模型、分类模型、预测类模型比较常用的方法总结如下&#xff1a; 接下来对这些比较典型的模型进行详细进行介绍说明。 一、评价模型 在数学建模中&#xff0c;评价模型是比较基础的模型之一&#x…

基于微信小程序快递取件上门预约服务系统设计与实现(开题报告+任务书+源码+lw+ppt +部署文档+讲解)

文章目录 前言运行环境说明用户的主要功能有&#xff1a;管理员的主要功能有&#xff1a;具体实现截图详细视频演示代码参考论文参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;…

蓝桥等考Python组别六级007

第一部分:选择题 1、Python L6 (15分) 运行下面的程序,输入5,结果是( )。 n = int(input()) if n > 10: print(A) else: if n > 5: print(B) else: print(C) ABC不输出任何内容正确答案:

基于Spring Boot的宠物咖啡馆平台的设计与实现

目录 前言 一、技术栈 二、系统功能介绍 用户信息管理 看护师信息管理 宠物寄养管理 健康状况管理 点单 宠物体验 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已…

vlc将本地文件推流成ts实时流

推流 打开vlc &#xff0c;打开 媒体----打开网络串流 选择文件选项卡&#xff0c;打开本地文件 点击添加&#xff0c;选择本地的mp3文件 选择串流 点击下拉框&#xff0c;选择udp&#xff0c;点击右边的【添加】按钮 输入媒体流输出地址&#xff0c;点击【下一个】 选择正确的…

Springboot实现jwt的token验证(超简单)

超简单的jwt验证token&#xff0c;直接复制粘贴即可使用&#xff01; 一、添加依赖 <!-- jwt加密 --><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.14.0</version></dependency…

分式理想 对偶群 对偶空间

参考文献&#xff1a; Deitmar A. A first course in harmonic analysis[M]. 2005.Ideal quotient | encyclopedia article by TheFreeDictionaryFractional ideal | encyclopedia article by TheFreeDictionaryPontryagin duality | encyclopedia article by TheFreeDictiona…

UG NX二次开发(C++)-CAM-根据刀具对程序组进行重新分组

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、在UG NX中创建一个三维模型3、在UG NX/CAM中创建多个加工程序4、采用UG NX二次开发(NXOpen)实现按照刀具分组程序组4.2 创建UI Styler4.1 实现逻辑4.2 生成的代码如下:4.3 测试效果4.…

java实现倒水瓶排序

最近看到一个小游戏倒水瓶很火, 就想用java来实现一下 实现思路 先确定瓶子和颜色的数量, 比如5种颜色, 那么就需要51个瓶子, 然后前5个瓶子每个瓶子倒满一种颜色, 每种颜色各5块, 最后一个是空瓶然后就是随机打乱瓶中色块最后将最后一个瓶子中的色块匀到其他瓶中, 一个关卡就…

Day 281/300 微信小程序 监听接口返回的数据后 动态赋值并展示

&#xff08;一&#xff09;现状 1、一开始使用的缓存setTimeout&#xff0c;缺点是不知道什么时候回来&#xff1b;网络速度慢的时候&#xff0c;会有空白的情况&#xff0c;或者是需要连续发&#xff0c;不太好&#xff1b; 2、想实现监听接口返回的数据后 动态赋值并展示的…

java导出word(含图片、表格)

1.pom 引入 <!--word报告生成依赖--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupI…

如何将html转换成markdown

什么是Turndown “Turndown” 是一个用于将 HTML 转换为 Markdown 的 JavaScript 库。它通常用于将富文本内容从网页或其他 HTML 格式转换为纯文本 Markdown 格式&#xff0c;以便在不同平台上显示或存储。 如果在有node环境的情况下要使用 Turndown&#xff0c;首先需要将它…

了解vtk显示的原理

文章目录 目标:知识补充:1.什么是图元?2.最让我不解的是:官方讲的是:mapper讲polydata转换为可渲染的图元数据,然后actor是将polydata映射为可渲染的图元???既然mapper就已经将其解析为图元数据,为什么actor还要进一步解析呢?3.那polydata不是也获得了一些数据,这些数据是…

【Elasticsearch】聚合查询(四)

Elasticsearch&#xff08;简称为ES&#xff09;是一个基于Lucene的开源搜索和分析引擎&#xff0c;提供了丰富的聚合查询功能。聚合查询指的是在搜索结果上执行分组、汇总和统计等操作&#xff0c;以便从大量数据中提取有用的信息和洞察。 这篇文章主要介绍检索相关的操作&…

云部署家里的服务器

1.固定静态ip 查看ip地址&#xff0c;en开头的 ifconfig查看路由器ip&#xff0c;via开头的 ip route修改配置文件 cd /etc/netplan/ #来到这个文件夹 sudo cp 01-network-manager-all.yaml 01-network-manager-all.yaml.bak #先备…