Как получить путь к подпапке в основном комплекте?

У меня есть проект, который я перевожу с Obj-C на Swift 3.0 (и я довольно новичок в Swift).

Как мне перевести эту строку?

NSString *folder = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"myfolder"];

Мне удалось получить путь к ресурсу:

let resoursePath = Bundle.main.resoursePath;

Но как мне получить путь к подпапке с именем "myfolder"? Мне нужно получить путь к подпапке, а не путь к файлам внутри нее.

4 ответа

Решение

В Swift-3 делают URLи позвоните appendingPathComponent:

let resourcePath = Bundle.main.resourcePath
let subdir = URL(fileURLWithPath:resourcePath!).appendingPathComponent("sub").path

или просто

let subdir = Bundle.main.resourceURL!.appendingPathComponent("sub").path

(спасибо, Martin R!)

Смотрите этот вопрос и ответы на информацию о stringByAppendingPathComponent Метод в Свифте.

Вы можете сделать что-то вроде этого:

let folderURL = resourceURL(to: "myfolder")

func resourceURL(to path: String) -> URL? {
    return URL(string: path, relativeTo: Bundle.main.resourceURL)
}

Вы можете использовать этот метод для получения списка подкаталога комплекта и получения ресурсов только определенного типа:

Bundle.main.paths(forResourcesOfType: type, inDirectory: folder)

Свифт 5.0

Свифт 5:

Предостережение: предполагается, что ваша папка действительно находится в комплекте; (что вы добавили папку в проект с помощью «Добавить ссылку на папку», а не с помощью опции «Добавить группы»).

      bundle.main.path(forResource: "myfolder", ofType: nil)

Objective-C: (ваш пример)

      NSString *folder = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"myfolder"];

Другие быстрые способы :

В качестве URL-адреса (предпочтительный метод Apple,:URL?включен здесь только для того, чтобы уточнить, что это не создает строку):

      let folderURL:URL? = Bundle.main.url(forResource: "myfolder", withExtension: nil)

Добавление в виде строки:

      let folder = Bundle.main.resourcePath?.appending("/myfolder")
// or
let y = Bundle.main.resourcePath?.appending("/").appending("myfolder")

Следующий дословный перевод терпит неудачу, так как appendingPathComponent больше не доступен в Swift.Stringтип, который немного отличается отNSString:

      let folder = Bundle.main.resourcePath?.appendingPathComponent("myfolder")
Другие вопросы по тегам