Я пытаюсь получить путь к папке «Документы» с кодом:
var documentsPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory:0,NSSearchPathDomainMask:0,true)
но Xcode выдает ошибку: Cannot convert expression's type 'AnyObject[]!' to type 'NSSearchPathDirectory'
Я пытаюсь понять, что не так в коде.
ios
swift
nsdocumentdirectory
Иван Р
источник
источник
Ответы:
По-видимому, компилятор считает, что
NSSearchPathDirectory:0
это массив, и, конечно, он ожидает типNSSearchPathDirectory
. Конечно, не полезное сообщение об ошибке.Но что касается причин:
Во-первых, вы путаете имена и типы аргументов. Взгляните на определение функции:
directory
иdomainMask
это имена, вы используете типы, но вы все равно должны оставить их для функций. Они используются в основном в методах.Так что это оставляет нас (обновлено для Swift 2.0):
и для Swift 3:
источник
NSString
а неString
.String
работает в Xcode 6.0 и 6.1. Как правило,String
иNSString
соединяются автоматически в Swift. Может быть, вам пришлось бросить поNSString
другой причине.String
в игровую площадку, но не в приложение. Проверьте вопрос ( stackoverflow.com/questions/26450003/… )/var/mobile/Containers/Data/Application/9E18A573-6429-434D-9B42-08642B643970/Documents
(2)/var/mobile/Containers/Data/Application/77C8EA95-B77A-474D-8522-1F24F854A291/Documents
Swift 3.0 и 4.0
Непосредственное получение первого элемента из массива потенциально может вызвать исключение, если путь не найден. Так
first
что лучше позвонить, а потом развернутьисточник
Современная рекомендация - использовать NSURL для файлов и каталогов вместо путей на основе NSString:
Итак, чтобы получить каталог Document для приложения как NSURL:
Это имеет элементарную обработку ошибок, так как это зависит от того, что ваше приложение будет делать в таких случаях. Но при этом используются URL-адреса файлов и более современные API для возврата URL-адреса базы данных, копирования исходной версии из пакета, если она еще не существует, или нулевого значения в случае ошибки.
источник
Xcode 8.2.1 • Swift 3.0.2
Xcode 7.1.1 • Swift 2.1
источник
Обычно я предпочитаю использовать это расширение:
Swift 3.x и Swift 4.0 :
Swift 2.x :
источник
let path = FileManager.documentsDir()+("/"+"\(fileName)")
вы можете вызывать ее без различий между потоками (основной или фоновый).Для всех, кто смотрит пример, который работает с Swift 2.2, код Abizern с современным постарайтесь поймать дескриптор ошибки
Обновление Я пропустил, что у нового swift 2.0 есть защита (Ruby, если не аналог), поэтому с защитой он намного короче и удобочитаем
источник
Более удобный метод Swift 3 :
источник
FileManager().urls(for: .documentDirectory, in: .userDomainMask).first!
Xcode 8b4 Swift 3.0
источник
Обычно я предпочитаю, как показано ниже в Swift 3 , потому что я могу добавить имя файла и легко создать файл
источник
absoluteString
неправильно. чтобы получить путь к файлу для fileURL, вам нужно получить его.path
свойство