ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Swift-Framework(一)访问资源文件

2021-11-09 20:59:46  阅读:111  来源: 互联网

标签:文件 访问 APP Bundle Framework main Swift


摘要

Framework 就是在 APP 应用中的一种封装功能的表现形式,虽然不能独立运行,但是也可以在它里面存放和访问图片、语音等资源文件,可算是麻雀虽小,五脏俱全。

毕竟不是 APP 工程,所以 Framework 中访问资源文件的方式就略有不同,下面进入正题 - Framework 中访问资源文件

本期主要是说明Framework 中访问资源文件,所以就简单的提一下 Framework 中放资源文件的两种方式:(特别指出,这里的 Framework 是动态库

  1. 将资源文件直接放在 Framework 的主目录文件中
  2. 创建 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 无法给我们想要的路径。

题外话

时间仓促,说的东西可能不全面,在你实现过程中遇到什么问题,评论区给我留言,我会尽快回复

标签:文件,访问,APP,Bundle,Framework,main,Swift
来源: https://blog.csdn.net/weixin_43636096/article/details/121236681

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有