Swift 3: Как получить путь к файлу, сохраненному в папке документов

path = Bundle.main.path(forResource: "Owl.jpg", ofType: "jpg")

возвращает nil, однако, используя NSHomeDirectory() Я могу проверить, что находится под .

2 ответов


во-первых, отдельное имя и расширение:

Bundle.main.path(forResource: "Owl", ofType: "jpg")

во-вторых, отделите (мысленно) ваш пакет и папку "Документы". Это две совершенно разные вещи. Если этот файл является папкой документов, он абсолютно не находится в вашем основном пакете! Вы, вероятно, хотите что-то вроде этого:

let fm = FileManager.default
let docsurl = try! fm.url(for:.documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
let myurl = docsurl.appendingPathComponent("Owl.jpg")

В-третьих, если Owl является активом изображения в каталоге активов, то скажите

let im = UIImage(named:"Owl") // or whatever its name is

проверено на: xCode 8.3.2 & Swift 3.1

сначала перетащите файл (JPG, MP3, ZIP) в папку проекта и убедитесь, что элементов скопировать проверен и проект/приложение выбирается в добавить в targetsenter image description here

внутри соответствующих ViewController

let fileName = "fileName"
let fileType = "fileType"

if let filePath = Bundle.main.path(forResource: fileName, ofType: fileType) {
    print(filePath)
}

Если вам нужно получить URL-адрес файла, вы можете использовать метод NSBundle

if let fileURL = Bundle.main.url(forResource: fileName, withExtension: fileType) {
    print(fileURL)
}

также Метод NSBundle pathForResource имеет инициализатор, в котором вы можете указать, в каком каталоге находятся ваши файлы:

if let filePath = Bundle.main.path(forResource: fileName, ofType: fileType, inDirectory: "filesSubDirectory") {
    print(filePath)
}

и для получения URL файла:

if let fileURL = Bundle.main.url(forResource: fileName, withExtension: fileType, subdirectory: "filesSubDirectory") {
    print(fileURL)
}