Запись строки в текстовый файл в каталоге документов iOS не дает ошибок, но не работает

#ios #swift #iphone #xcode

Вопрос:

У меня есть этот код для записи строки в текстовый файл в каталоге документов моего приложения по умолчанию, но в моей консоли ничего не печатается, и файл не создается. Что я здесь упускаю?

         func getDocumentsDirectory() -> URL {
            let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
            return paths[0]
        }
        
        struct ContentView: View {
            func getDocumentsDirectory() -> URL {
                let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
                print(paths)
                return paths[0]
            }
            
            var body: some View {
                Text(" Text that is written to file")
                    .onTapGesture {
                        let str = "This is a test message"
                        let url = self.getDocumentsDirectory().appendingPathComponent("ARData.txt")
                        do{
                            try str.write(to: url, atomically: true, encoding: .utf8)
                            let input = try String(contentsOf: url)
                            print(input)
                        } catch{
                            print(url)
                        }
                    }
            }
        }
    }
 

Комментарии:

1. Внимательно посмотрите на getDocumentsDirectory(). Проверьте тип данных внутри него.

2. Код верен и должен работать. Но он ничего не показывает, если он выполняется на холсте предварительного просмотра. Вы должны запустить его в симуляторе. @RB Нет необходимости создавать файл явно.

3. @vadian спасибо :), я просто забыл, что это не каталог, а файл, который он создаст, добавив путь.

4. @vadian У меня он работает на моем iPhone, так что это не должно быть проблемой с симулятором. Может быть, я ищу файл не в том каталоге?

5. Как я уже сказал, код действителен (похоже, от взлома с помощью Swift). Это что-нибудь показывает?