Swift-Framework(一)访问资源文件
摘要
Framework 就是在 APP 应用中的一种封装功能的表现形式,虽然不能独立运行,但是也可以在它里面存放和访问图片、语音等资源文件,可算是麻雀虽小,五脏俱全。
毕竟不是 APP 工程,所以 Framework 中访问资源文件的方式就略有不同,下面进入正题 - Framework 中访问资源文件
本期主要是说明Framework 中访问资源文件,所以就简单的提一下 Framework 中放资源文件的两种方式:(特别指出,这里的 Framework 是动态库)
- 将资源文件直接放在 Framework 的主目录文件中
- 创建 Bundle 文件,将资源文件放在 Bundle 文件中
以上两种方式都可,如果对以上两种方式感兴趣,给我留言,我专门讲一下这两种方式的实现,和它们的差异。
APP 工程中访问资源文件
先来看下在 APP 工程中访问一个图片资源是如何处理的:
/** 图片放在主目录中 */
// 获取图片
let image = UIImage(name: "picture")
// 获取图片,同上等价
let image = UIImage.init(named: "picture", in: Bundle.main, with: nil)
再来看下,在 APP 工程中访问一个 .mp3 文件,是如何处理的:
// path 为这个 mp3 文件的路径
let path = Bundle.main.path(forResource: "mp3FileName", ofType: "mp3")
通过上面两个例子,可以总结出 APP 工程就相当于一个 bundle 文件,并且可以通过 Bundle.main 的方式去访问这里的资源文件。
那么 Framework 是放在 APP 工程中使用的,Framework 中的资源文件是不是也可以通过 Bundle.main 来访问呢?
Framework 中访问资源文件
接上面问题,肯定的回答是 NO。先说明下,在 Framework 中如何访问它自身的资源文件,看例子:
// path 为这个 mp3 文件的路径
let path = Bundle.init(for: GeneralExtension.self).path(forResource: "mp3FileName", ofType: "mp3")
GeneralExtension 是 Framework 中的一个 class,可以用 Framework 中的任何一个 class 替代。
这里要特别注意,在 Framework 中使用 Bundle.main 去访问其中的任何文件资源是无效的,这又是为什么呢?
为什么 Framework 中使用 Bundle.main 无效?
这里打印一下 Bundle.main 分别在 APP 工程中和 Framework 中返回的路径信息:
/** xxx 为 APP 项目名称 **/
// 在 APP 项目中,任何一个控制器中就好
print(Bundle.main) // Print: </private/var/containers/Bundle/Application/F5113D7B-766E-4FC5-A43D-042D6FAE12D8/xxx.app>
// 在 Framework 中
print(Bundle.main) // Print: </private/var/containers/Bundle/Application/6B6A2ED6-C616-4B38-A3CD-B8FA7373266E/xxx.app>
结果可以看出,不管在 APP 项目中的任何位置使用 Bundle.main 返回的都是相同的一个路径,APP 项目的路径。
但是我们要访问的是 Framework 中的资源文件,当然要先知道 Framework 的路径,才能往下去找,明显,Framework 中的 Bundle.main 无法给我们想要的路径。
题外话
时间仓促,说的东西可能不全面,在你实现过程中遇到什么问题,评论区给我留言,我会尽快回复
Swift-Framework(一)访问资源文件的更多相关文章
- 安卓普通类通过classloader访问资源文件
Android studio不知道怎么设置,才可以在生成APK时把一些文件打包进去. 但是不管怎么样,放在res文件夹下的东西是一定得打包的.所以把一些资源文件放在res/raw这个文件夹里是科学的. ...
- R.Swift优雅加载资源文件
在新的项目中,接触到了一个很不错的框架R.swift,可以帮助更方便安全的使用资源文件,相信已经使用过的或者还没有接触过的,一旦使用过了解过它,会爱上这个框架工具! 一.R.swift特点 当项目bu ...
- 使用ResourceBundle访问资源文件(properties)帮助类
import java.util.ResourceBundle; /** * 读取properties文件的帮助类 * @author */ public class PropertiesUtil { ...
- framework资源文件读取
1.在framework里面读framwork自己的资源文件 这是framework内部的资源,跟其他都没有关系.但是framework不能单独存在,必须要放在某个“主程序”中才能起作用.bundle ...
- iOS组件化之-给自己的组件添加资源文件
在 podspec 中,利用 source_files 可以指定要编译的源代码文件.可是,当我们需要把图片.音频.NIB等资源打包进 Pod 时该怎么办呢? 1.如何把资源文件打包为.bundle文件 ...
- 【Java EE 学习 35 上】【strus2】【类型转换器】【struts2和Servlet API解耦】【国际化问题】【资源文件乱码问题已经解决】
一.类型转换器 1.在动作类action中,声明和表单中name属性的值同名的属性,提供get和set方法,struts2就可以通过反射机制,从页面中获取对应的内容 package com.kdyzm ...
- 在IIS上新发布的网站,样式与js资源文件加载不到(资源文件和网页同一个域名下)
在IIS上新发布的网站,网站能打开,但样式与js资源文件加载不到(资源文件和网页是同一个域名下,例如:网页www.xxx.com/index.aspx,图片www.xxx.com/pic.png). ...
- Pyinstaller如何将资源文件一起打包至exe中
基本原理:Pyinstaller 可以将资源文件一起bundle到exe中,当exe在运行时,会生成一个临时文件夹,程序可通过sys._MEIPASS访问临时文件夹中的资源 官方说明:https:// ...
- struts2官方 中文教程 系列七:消息资源文件
介绍 在本教程中,我们将探索使用Struts 2消息资源功能(也称为 resource bundles 资源绑定).消息资源提供了一种简单的方法,可以将文本放在一个视图页面中,通过应用程序,创建表单字 ...
随机推荐
- file_get_contents('php://input') 数据如何转换成数组
前台表单页:demo01.html 后台:demo01.php 输出结果: 备注:若前台通过Ajax的post提交过来的是json数据,需要对json数据进行解析:$data = json_decod ...
- P2611-[ZJOI2012]小蓝的好友【Treap,扫描线】
正题 题目链接:https://www.luogu.com.cn/problem/P2611 题目大意 \(r*c\)的网格上有\(n\)个标记点,然后求有多少个矩形包含至少一个标记点. \(1\le ...
- Windows环境下搭建Hadoop(2.6.0)+Hive(2.2.0)环境并连接Kettle(6.0)
前提:配置JDK1.8环境,并配置相应的环境变量,JAVA_HOME 一.Hadoop的安装 1.1 下载Hadoop (2.6.0) http://hadoop.apache.org/release ...
- HTML的一些技巧
清除form表单 this.$refs.formName.resetFields() 验证表单 this.$refs.createForm.validate((valid) => {}) 当im ...
- Linux命令行:free
total used free shared buff/cache availableMem: 251G ...
- IOS开发之UIScrollView约束布局
概要 在iOS开发学习中,UIScrollView是绕不过去的一个重要控件. 但是相对于Android的ScrollView,iOS的这个滚动控件的用法简直是复杂一万倍... 最主要是目前能找到的大部 ...
- 从零入门 Serverless | SAE 的远程调试和云端联调
作者 | 弈川 阿里巴巴云原生团队 导读:本节课程包含三部分内容,前两个部分简单介绍远程调试以及端云联调的原理,最后在 Serverless 应用引擎中进行实际演示. 经过之前课程的学习,相信大家对于 ...
- Redis缓存穿透、缓存击穿、缓存雪崩的介绍及其解决方案
首先,来画一张图了解下缓存处理的流程 一.缓存穿透 描述: 缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求查询该数据,导致数据库压力过大. 解决方案: 1.接口校验 如鉴权校验.数据合法性 ...
- 题解 [HAOI2012]道路
题目传送门 题目大意 给出一个 \(n\) 个点 \(m\) 条边的有向图,问每一条边在多少个最短路径中出现. \(n\le 1500,m\le 5000\) 思路 算我孤陋寡闻了... 很显然,我们 ...
- Mydoom样本分析报告
文件检测 信息 值 文件名 1.virus 文件类型 WIN 32 EXE 文件大小 41664 bytes MD5 3d466b0f8ba9f3fe03e137a34d79f682 SHA-256 ...