Я создал это FileManager
extension
. С этой extension
, я хочу создать иерархию файлов следующим образом:iOS - Лучшие практики для расширений FileManager
- Поддержка приложений
- Избранное
- Feed
- Изображения
Это код, который я имею в FileManager
extension
, который я бы назвал в app delegate
как только запуски приложений. Затем я бы использовал этот код, чтобы всегда извлекать path
из папок.
Это хороший способ создать эту иерархию и получить пути, когда они мне понадобятся? Это хорошая практика?
extension FileManager {
static func createOrFindApplicationDirectory() -> URL? {
let bundleID = Bundle.main.bundleIdentifier
// Find the application support directory in the home directory.
let appSupportDir = self.default.urls(for: .applicationSupportDirectory, in: .userDomainMask)
guard appSupportDir.count > 0 else {
return nil
}
// Append the bundle ID to the URL for the Application Support directory.
let dirPath = appSupportDir[0].appendingPathComponent(bundleID!)
// If the directory does not exist, this method creates it.
do {
try self.default.createDirectory(at: dirPath, withIntermediateDirectories: true, attributes: nil)
return dirPath
} catch let error {
print("Error creating Application Support directory with error: \(error)")
return nil
}
}
static func createOrFindFavoritesDirectory() -> URL? {
guard let appSupportDir = createOrFindApplicationDirectory() else {
return nil
}
let dirPath = appSupportDir.appendingPathComponent("Favorites")
// If the directory does not exist, this method creates it.
do {
try self.default.createDirectory(at: dirPath, withIntermediateDirectories: true, attributes: nil)
return dirPath
} catch let error {
print("Error creating Favorites directory with error: \(error)")
return nil
}
}
static func createOrFindFeedDirectory() -> URL? {
guard let appSupportDir = createOrFindFavoritesDirectory() else {
return nil
}
let dirPath = appSupportDir.appendingPathComponent("Feed")
// If the directory does not exist, this method creates it.
do {
try self.default.createDirectory(at: dirPath, withIntermediateDirectories: true, attributes: nil)
return dirPath
} catch let error {
print("Error creating Favorites directory with error: \(error)")
return nil
}
}
static func currentImagesDirectory() -> URL? {
guard let feedDir = createOrFindFeedDirectory() else {
return nil
}
let dirPath = feedDir.appendingPathComponent("Images")
// If the directory does not exist, this method creates it.
do {
try self.default.createDirectory(at: dirPath, withIntermediateDirectories: true, attributes: nil)
return dirPath
} catch let error {
print("Error creating Images directory with error: \(error)")
return nil
}
}
}
Выглядит хорошо для меня. –
@ILikeTau Спасибо! Есть ли что-то другое? Я хотел бы увидеть некоторые другие примеры, поместить свой собственный код или учебник/ссылку, которая имеет нечто похожее на то, что я пытаюсь сделать. – JEL
Я мог бы комбинировать 'createOrFindFavoritesDirectory()' и 'createOrFindFeedDirectory()' в одну функцию, которая принимает аргумент, но кроме этого все это выглядит нормально. –