Создать каталог в 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 и он отлично работает.

enter image description here