Создать каталог в Swift 3.0
Я новый ученик в 9-м классе, быстро развивающийся, создавая школьный проект.
Я пытаюсь создать каталог, в котором я хочу сохранить отсканированный файл в формате pdf.
При создании каталога я получаю ошибку ниже.
Ошибка 1:
Невозможно использовать экземпляр "filemgr" в инициализаторе свойств; Инициализаторы свойств запускаются до "Я".
Ошибка 2:
Ожидаемая декларация
Код:
let filemgr = FileManager.default
let dirPaths = filemgr.urls(for: .documentDirectory, in: .userDomainMask)
let docsURL = dirPaths[0]
let newDir = docsURL.appendingPathComponent("data").path
do{
try filemgr.createDirectory(atPath: newDir,withIntermediateDirectories: true, attributes: nil)
} catch {
print("Error: \(error.localizedDescription)")
}
Пожалуйста, помогите мне в решении этой проблемы.
Благодарю.
Ответы
Ответ 1
Pls, напишите этот код:
Swift 4.0 и Swift 3.0
let documentsPath1 = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])
let logsPath = documentsPath1.appendingPathComponent("data")
do
{
try FileManager.default.createDirectory(atPath: logsPath!.path, withIntermediateDirectories: true, attributes: nil)
}
catch let error as NSError
{
NSLog("Unable to create directory \(error.debugDescription)")
}
Ответ 2
Для Swift 4.0 Пожалуйста, используйте это
let fileManager = FileManager.default
if let tDocumentDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first {
let filePath = tDocumentDirectory.appendingPathComponent("\(FOLDER_NAME)")
if !fileManager.fileExists(atPath: filePath.path) {
do {
try fileManager.createDirectory(atPath: filePath.path, withIntermediateDirectories: true, attributes: nil)
} catch {
NSLog("Couldn't create document directory")
}
}
NSLog("Document directory is \(filePath)")
}
Ответ 3
Для Swift 4.0 я создал следующее расширение URL
которое позволяет создать папку из каталога документов в приложении.
import Foundation
extension URL {
static func createFolder(folderName: String) -> URL? {
let fileManager = FileManager.default
// Get document directory for device, this should succeed
if let documentDirectory = fileManager.urls(for: .documentDirectory,
in: .userDomainMask).first {
// Construct a URL with desired folder name
let folderURL = documentDirectory.appendingPathComponent(folderName)
// If folder URL does not exist, create it
if !fileManager.fileExists(atPath: folderURL.path) {
do {
// Attempt to create folder
try fileManager.createDirectory(atPath: folderURL.path,
withIntermediateDirectories: true,
attributes: nil)
} catch {
// Creation failed. Print error & return nil
print(error.localizedDescription)
return nil
}
}
// Folder either exists, or was created. Return URL
return folderURL
}
// Will only be called if document directory not found
return nil
}
}
Если желаемая папка не существует, она создаст ее. Затем, предполагая, что папка существует, он возвращает URL
пользователю. В противном случае, если он терпит неудачу, то возвращается nil
.
Например, чтобы создать папку "MyStuff", вы бы назвали ее следующим образом:
let myStuffURL = URL.createFolder(folderName: "MyStuff")
Это вернет:
Файл:///вар/мобильный/Контейнеры/Data/Application/4DE0A1C0-8629-47C9-87D7-C2B4F3A16D24/Документы/MyStuff/
Вы также можете создавать вложенные папки со следующим:
let myStuffHereURL = URL.createFolder(folderName: "My/Stuff/Here")
Что дает вам:
Файл:///вар/мобильный/Контейнеры/Data/Application/4DE0A1C0-8629-47C9-87D7-C2B4F3A16D24/Документы/My/Материал/Здесь/
Ответ 4
Вы получаете это, потому что присваиваете значение экземпляру newDir
в неправильном месте.
Я написал ваш код в viewDidLoad
и он отлично работает.