今天在做iOS加载本地H5时,发现自己不会取工程中的文件,真是头疼呀!于是研究了下bundle的用法,可算解决了。其中主要借鉴下面这篇文章:
https://blog.csdn.net/jingfa1993/article/details/79758849
看了之后有个小小的感悟:
1、我们的工程其本身就是在一个bundle之下,叫做mainBundle,swift中获取方式就是Bundle.main。
2、Bundle下可以新建有文件、文件夹。(猜测可能还可以有bundle,因为mainbundle是一个bundle,我们可以在其下新建一个bundle)
3、如果有大量的外部文件最好放在Bundle中;
开发中需要解决的文件:
1、如果把外部文件导入工程中?
2、怎样获取到我们想要的文件;
首先我们来看下如何导入外部文件到工程中?主要针对的是多级目录的文件夹
1、重点讲一下是选“Create groups”还是“Create folder references”?Groups的概念是一个“分组”,而不是文件夹,他其实对文件所在位置没什么要求,你可以看做是完全为了让我们开发者看得方便而分的小组,其实编译器不管这个的,故iOS要求一个工程下文件名不能相同。而选择“Create folder references”,在iOS看来,这不是一个代码文件,我不会对它进行编译。
明白了两者之间的区别,就很容易选择了,如果我们引用的是代码,需要编译的,就选“Create groups”,如果是资源文件,不用编译就选“Create folder references”,groups是黄色的文件夹,references是蓝色的文件夹。
2、自定义bundle的使用。
自定义bundle可以让工程看起来更舒服,毕竟这些都是资源文件,我们放在bundle里面是不是更好?
如何创建bundle呢:如图new file->起个名字->完成
如果你用Bundle导入资源的话,就不需要问“Create groups”还是“Create folder references”,它里面放的就是资源文件,不存在还要编译
讲完了如何导入资源文件,接下来讲讲如何获取资源文件
1、获取mainBundle:Bundle.main(心里知道就行)
2、获取到自定义bundle的路径
let htmlBundlePath =Bundle.main.path(forResource:"HTMLBundle", ofType:"bundle")
代码解读:获取mainbundle下名字为HTMLBundle、类型为bundle的文件的路径
3、得到自定义bundle:
let htmlBundle =Bundle.init(path: htmlBundlePath)
4、从bundle中取出想要的文件:
如我要获取到budle下xuqiu文件夹下的add文件夹下的fwxm.html文件:
先获取文件路径
let path = htmlBundle.path(forResource:"fwxm", ofType:"html", inDirectory:"xuqiu/add"
在通过路径获取文件:(根据文件不同,获取方式不同,下面展示html的获取方式)
let url = URL.init(fileURLWithPath: path)
view.loadFileURL(url, allowingReadAccessTo:url)