@@ -18,6 +18,7 @@ public enum Operations: Swift.Error {
18
18
case deletaFail
19
19
case saveFail
20
20
case loadFail
21
+ case folderCreation
21
22
}
22
23
23
24
/// Enum to indicate the live time of each time in the cache
@@ -159,15 +160,11 @@ public class SKCache: NSCache<AnyObject, AnyObject> {
159
160
let cacheDirectory = try fileManager. url ( for: . cachesDirectory, in: . allDomainsMask, appropriateFor: nil , create: false )
160
161
let fileDirectory = cacheDirectory. appendingPathComponent ( " spacekit " )
161
162
162
- var isDirectory : ObjCBool = false
163
-
164
163
var fileDir = fileDirectory. absoluteString
165
164
let range = fileDir. startIndex..< fileDir. index ( fileDir. startIndex, offsetBy: 7 )
166
165
fileDir. removeSubrange ( range)
167
166
168
- if !fileManager. fileExists ( atPath: fileDir, isDirectory: & isDirectory) {
169
- try fileManager. createDirectory ( at: fileDirectory, withIntermediateDirectories: false , attributes: nil )
170
- }
167
+ try createFolderIfNeeded ( atPath: fileDir, absolutePath: fileDirectory)
171
168
172
169
for object in objects {
173
170
let fileFormatedName = object. key. addingPercentEncoding ( withAllowedCharacters: . urlHostAllowed) ?? object. key
@@ -192,18 +189,22 @@ public class SKCache: NSCache<AnyObject, AnyObject> {
192
189
let fileManager = FileManager . default
193
190
do {
194
191
let cacheDirectory = try fileManager. url ( for: . cachesDirectory, in: . allDomainsMask, appropriateFor: nil , create: false )
195
- var fileDirectory = cacheDirectory. appendingPathComponent ( " spacekit " ) . absoluteString
196
- let range = fileDirectory. startIndex..< fileDirectory. index ( fileDirectory. startIndex, offsetBy: 7 )
197
- fileDirectory. removeSubrange ( range)
192
+ let fileDirectory = cacheDirectory. appendingPathComponent ( " spacekit " )
198
193
199
- let paths = try fileManager. contentsOfDirectory ( atPath: fileDirectory)
194
+ var fileDir = fileDirectory. absoluteString
195
+ let range = fileDir. startIndex..< fileDir. index ( fileDir. startIndex, offsetBy: 7 )
196
+ fileDir. removeSubrange ( range)
197
+
198
+ try createFolderIfNeeded ( atPath: fileDir, absolutePath: fileDirectory)
199
+
200
+ let paths = try fileManager. contentsOfDirectory ( atPath: fileDir)
200
201
201
202
for path in paths {
202
- if let object = NSKeyedUnarchiver . unarchiveObject ( withFile: fileDirectory + path) as? SKObject {
203
+ if let object = NSKeyedUnarchiver . unarchiveObject ( withFile: fileDir + path) as? SKObject {
203
204
if !object. isExpired {
204
205
SKCache . shared. add ( object: object)
205
206
} else {
206
- try ? fileManager. removeItem ( atPath: fileDirectory + path)
207
+ try ? fileManager. removeItem ( atPath: fileDir + path)
207
208
}
208
209
}
209
210
}
@@ -229,5 +230,21 @@ public class SKCache: NSCache<AnyObject, AnyObject> {
229
230
230
231
// MARK: - Private methods
231
232
233
+ /// Private method to create the cache folder if it doesn't exist
234
+ ///
235
+ /// - Parameter path: The path where the folder will be created
236
+ private func createFolderIfNeeded( atPath path: String , absolutePath: URL ) throws {
237
+ let fileManager = FileManager . default
238
+ var isDirectory : ObjCBool = false
239
+
240
+ do {
241
+ if !fileManager. fileExists ( atPath: path, isDirectory: & isDirectory) {
242
+ try fileManager. createDirectory ( at: absolutePath, withIntermediateDirectories: false , attributes: nil )
243
+ }
244
+ } catch {
245
+ throw Operations . folderCreation
246
+ }
247
+ }
248
+
232
249
}
233
250
0 commit comments