2015-11-25 10 views
1

Это то, что я сейчас:Как создать подкаталог с помощью URLForDirectory?

let path = try! NSFileManager.defaultManager().URLForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomain: NSSearchPathDomainMask.UserDomainMask, appropriateForURL: nil, create: true) 

это выход для print(path):

file:///Users/kuna/Library/Developer/CoreSimulator/Devices/92BD140D-5C14-43C4-80D6-904BB9594ED6/data/Containers/Data/Application/CD9B3821-C536-4B46-B838-259490FD008E/Documents/ 

Внутри этого каталога мне нужно создать images подкаталог.

Какой код следует выполнять для его достижения?

Документация говорит о apriopriateForURL:

Имени каталога, внутри которого вы хотите создать уникальный временный каталог для автосохранения документов или другого использования.

ответ

2
let path = try! NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true) 
let imageURL = path?.URLByAppendingPathComponent("images") 
try! NSFileManager.defaultManager().createDirectoryAtURL(imageURL!, withIntermediateDirectories: true, attributes: nil) 
1

Параметр appropriateForURL не используется, передавая .DocumentDirectory для параметра каталога.

ли его традиционным способом:

let fileManager = NSFileManager.defaultManager() 
do { 
    let documentURL = try fileManager.URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true) 
    let imageDirectoryURL = documentURL.URLByAppendingPathComponent("images") 
    try fileManager.createDirectoryAtURL(imageDirectoryURL, withIntermediateDirectories: false, attributes: nil) 
} catch let error as NSError { 
    if error.code == 516 { 
    print("The directory already exists") 
    } else { 
    print(error) 
    } 
} 
+0

Почему не withIntermediateDirectories: правда? Ничего не стоит и может спасти вашу задницу, если это вновь установленное приложение, а промежуточные каталоги еще не существуют. Скорее всего, вы не тестируете. Также не будет ошибки, если каталог существует, что вы хотите - вы просто хотите убедиться, что он есть после вызова. – gnasher729

+0

В принципе, вы правы, но поскольку мы знаем, что родительский каталог существует безопасно, это необязательно. И установка 'withIntermediateDirectories' в' true' не является полностью бесплатной, метод должен проверить, действительно ли каталог существует. Одной из новых концепций Swift является забота об этих вещах во время компиляции, чтобы получить более эффективный код во время выполнения. – vadian

Смежные вопросы