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

    题外话

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

  • 相关阅读:
    基于springboot框架的博客系统
    告别并不遥远的儿时,抬眼期待未来
    Python微信公众号教程基础篇——收发文本消息
    华为云落地敏捷+DevOps,助力大企业高效能
    【nodejs原理&源码赏析(5)】net模块与通讯的实现
    华为云&华中大联合实验室,夺得2019ICDAR发票识别竞赛世界第一
    00034_类与对象
    php批量下载文件
    php批量下载图片
    asp.net批量下载文件
  • 原文地址:https://www.cnblogs.com/shsuper/p/15530907.html
Copyright © 2020-2023  润新知