Estoy tratando de obtener la ruta a la carpeta Documentos con código:
var documentsPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory:0,NSSearchPathDomainMask:0,true)
pero Xcode da error: Cannot convert expression's type 'AnyObject[]!' to type 'NSSearchPathDirectory'
Estoy tratando de entender lo que está mal en el código.
ios
swift
nsdocumentdirectory
Ivan R
fuente
fuente
Respuestas:
Aparentemente, el compilador piensa que
NSSearchPathDirectory:0
es una matriz y, por supuesto, espera el tipo en suNSSearchPathDirectory
lugar. Ciertamente no es un mensaje de error útil.Pero en cuanto a las razones:
Primero, está confundiendo los nombres y tipos de argumentos. Eche un vistazo a la definición de la función:
directory
ydomainMask
son los nombres, está utilizando los tipos, pero de todos modos debe dejarlos fuera para las funciones. Se utilizan principalmente en métodos.Eso nos deja con (actualizado para Swift 2.0):
y para Swift 3:
fuente
NSString
lugar deString
.String
funciona en Xcode 6.0 y 6.1. Generalmente,String
yNSString
se puentean automáticamente en Swift. Tal vez tuviste que elegirNSString
por otra razón.String
en un patio de recreo, pero no en una aplicación. Consulta la pregunta ( 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 y 4.0
Obtener directamente el primer elemento de una matriz puede causar una excepción si no se encuentra la ruta. Entonces, llamar
first
y luego desenvolver es la mejor soluciónfuente
La recomendación moderna es usar NSURL para archivos y directorios en lugar de rutas basadas en NSString:
Entonces, para obtener el directorio de documentos para la aplicación como NSURL:
Esto tiene un manejo de errores rudimentario, ya que ese tipo de depende de lo que haga su aplicación en tales casos. Pero esto usa URL de archivos y una API más moderna para devolver la URL de la base de datos, copiando la versión inicial del paquete si aún no existe, o una nula en caso de error.
fuente
Xcode 8.2.1 • Swift 3.0.2
Xcode 7.1.1 • Swift 2.1
fuente
Por lo general, prefiero usar esta extensión:
Swift 3.xy Swift 4.0 :
Swift 2.x :
fuente
let path = FileManager.documentsDir()+("/"+"\(fileName)")
puede llamarlo sin diferencias entre el hilo (principal o de fondo).Para todos los que buscan un ejemplo que funcione con Swift 2.2, el código de Abizern con moderno intenta detectar el error
Actualización He echado de menos que el nuevo swift 2.0 tenga protector (Ruby a menos que sea analógico), por lo que con protector es mucho más corto y más legible
fuente
Método Swift 3 más conveniente :
fuente
FileManager().urls(for: .documentDirectory, in: .userDomainMask).first!
Xcode 8b4 Swift 3.0
fuente
Por lo general, prefiero como a continuación en Swift 3 , porque puedo agregar el nombre del archivo y crear un archivo fácilmente
fuente
absoluteString
Está Mal. para obtener la ruta del archivo de un archivo URL necesita obtener su.path
propiedad