如何製作 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 物件。