Saya mencoba mendapatkan jalur ke folder Dokumen dengan kode:
var documentsPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory:0,NSSearchPathDomainMask:0,true)
tetapi Xcode memberikan kesalahan: Cannot convert expression's type 'AnyObject[]!' to type 'NSSearchPathDirectory'
Saya mencoba memahami apa yang salah dalam kode.
ios
swift
nsdocumentdirectory
Ivan R
sumber
sumber
Jawaban:
Rupanya, kompiler berpikir
NSSearchPathDirectory:0
adalah sebuah array, dan tentu saja mengharapkan tipe ituNSSearchPathDirectory
sebagai gantinya. Jelas bukan pesan kesalahan yang membantu.Tetapi untuk alasan:
Pertama, Anda mengacaukan nama dan tipe argumen. Lihatlah definisi fungsi:
directory
dandomainMask
apakah namanya, Anda menggunakan tipenya, tetapi Anda tetap harus membiarkannya untuk fungsi. Mereka digunakan terutama dalam metode.Sehingga meninggalkan kita dengan (diperbarui untuk Swift 2.0):
dan untuk Swift 3:
sumber
NSString
daripadaString
.String
berfungsi di Xcode 6.0 dan 6.1. Secara umum,String
danNSString
dijembatani secara otomatis di Swift. Mungkin Anda harus ikutNSString
karena alasan lain.String
di taman bermain, tetapi tidak dalam aplikasi. Lihat pertanyaan ( 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 dan 4.0
Langsung mendapatkan elemen pertama dari array berpotensi menyebabkan pengecualian jika jalur tidak ditemukan. Jadi menelepon
first
dan membuka bungkusan adalah solusi yang lebih baiksumber
Rekomendasi modern adalah untuk menggunakan NSURLs untuk file dan direktori, bukan jalur berbasis NSString:
Jadi untuk mendapatkan direktori Dokumen untuk aplikasi sebagai NSURL:
Ini memiliki penanganan kesalahan yang belum sempurna, karena hal itu tergantung pada apa yang akan dilakukan aplikasi Anda dalam kasus tersebut. Tapi ini menggunakan URL file dan api yang lebih modern untuk mengembalikan URL database, menyalin versi awal dari bundel jika belum ada, atau nol jika terjadi kesalahan.
sumber
Xcode 8.2.1 • Swift 3.0.2
Xcode 7.1.1 • Swift 2.1
sumber
Biasanya saya lebih suka menggunakan ekstensi ini:
Swift 3.x dan Swift 4.0 :
Swift 2.x :
sumber
let path = FileManager.documentsDir()+("/"+"\(fileName)")
Anda dapat menyebutnya tanpa perbedaan antara utas (utama atau latar belakang).Untuk semua orang yang melihat contoh yang bekerja dengan Swift 2.2, kode Abizern dengan modern jangan coba-coba menangani kesalahan
Pembaruan Saya telah melewatkan bahwa swift 2.0 baru memiliki pelindung (Ruby kecuali analog), jadi dengan pelindung itu jauh lebih pendek dan lebih mudah dibaca
sumber
Metode Swift 3 yang lebih nyaman :
sumber
FileManager().urls(for: .documentDirectory, in: .userDomainMask).first!
Xcode 8b4 Swift 3.0
sumber
Biasanya saya lebih suka seperti di bawah ini di swift 3 , karena saya dapat menambahkan nama file dan membuat file dengan mudah
sumber
absoluteString
salah. untuk mendapatkan path file dari fileURL Anda perlu mendapatkan.path
propertinya