Как получить путь к подпапке в основном комплекте?
У меня есть проект, который я перевожу с 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")