如何製作 Bundle 和讀取 Bundle 裡的檔案

開發 iOS App 時,我們時常看到 Bundle 出現,其實它就是資料夾,只是檔名加了附檔名 .bundle 後,它變成另一個樣子,不像我們在 Mac 上熟悉的藍色資料夾。因此要製作 Bundle 很簡單,只要把資料夾的名字加上 .bundle 即可,例如以下例子

1 建立一個資料夾,命名為 SwiftBook,裡面放上準備閱讀的 Swift 書籍封面圖片。

2 將資料夾的名字加上 .bundle,變成 SwiftBook.bundle。

改名時 Finder 還好心提醒我們,改名後會變成長得像是一個檔案,不再是帥氣的藍色資料夾模樣。

改名後 SwiftBook.bundle 其實變得更帥了,變成帥氣的白色積木方塊,在 Mac 上附檔名 bundle 的檔案都是長這個樣子。

有了 Bundle 後,接下來就讓我們將它加到專案裡,看看如何讀取裡頭的圖片吧。

class ViewController: UIViewController {   @IBOutlet weak var imageView: UIImageView!   override func viewDidLoad() {      super.viewDidLoad()      if let url = Bundle.main.url(forResource: "SwiftBook", withExtension: "bundle"), 
     let bundle = Bundle(url: url),
     let path = bundle.path(forResource: "Swift in Depth", ofType: "jpg") {
let image = UIImage(contentsOfFile: path) imageView.image = image } }

剛剛的程式裡,讀取 Bundle 裡的檔案可分為三個步驟

1 從 main bundle 的 function url(forResource:withExtension:) 取得 bundle 檔的 URL。

let url = Bundle.main.url(forResource: "SwiftBook", withExtension: "bundle")

2 從剛剛的 URL 生成 Bundle 物件。

let bundle = Bundle(url: url)

3 呼叫 Bundle 物件的 function path(forResource:ofType:),取得 Bundle 裡某個檔案的路徑。

let path = bundle.path(forResource: "Swift in Depth", ofType: "jpg")

參數 forResource 後填入檔案的名字,ofType 填入附檔名。

有了檔案的路徑後,之後我們即可生成它的 Data 或 UIImage 物件。

--

--

彼得潘的 iOS App Neverland
彼得潘的 Swift iOS App 開發問題解答集

彼得潘的iOS App程式設計入門,文組生的iOS App程式設計入門講師,彼得潘的 Swift 程式設計入門,App程式設計入門作者,http://apppeterpan.strikingly.com