zoukankan      html  css  js  c++  java
  • SwiftFramework(一)访问资源文件

    摘要

    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 无法给我们想要的路径。

    题外话

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

  • 相关阅读:
    My97日期控件 My97 DatePicker 4.0 Prerelease 发布
    My97DatePicker提问需知,仔细阅读可以在最快的时间收到问题反馈
    My97日期控件3.0不支持IE8,4.2以上已经支持,强烈建议还在使用3.x的用户换成最新版
    My97日期控件 My97 DatePicker 4.0 Beta4 发布(候选版本)
    My97日期控件 My97 DatePicker 4.0 正式版
    坚持打造最好的日期控件,My97 DatePicker 4.7 Release
    [PYTHON] 格式化输出的几种方法 HONG
    数组反转函数 blog_zss小帅
    fastadmin 按钮状态 blog_zss小帅
    fastadmin 固定列表字段 blog_zss小帅
  • 原文地址:https://www.cnblogs.com/shsuper/p/15530907.html
Copyright © 2011-2022 走看看