如何在swift中按升序保存图片?

How to save images in ascending order in swift?

我正在构建一个应用程序,我在其中使用 FileManager 来使用设备相机保存一些图像。所以现在我将文件名保存为 Doc-Time。 我正在使用下面的代码,

func saveImageToDocumentDirectory(image: UIImage ) {
    let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "hh:mm:ss"
    
    let fileName = "Doc-" + dateFormatter.string(from: Date())
    let fileURL = documentsDirectory.appendingPathComponent(fileName
    )
    if let data = image.jpegData(compressionQuality: 1.0),!FileManager.default.fileExists(atPath: fileURL.path){
        do {
            try data.write(to: fileURL)
            print("file saved")
        } catch {
            print("error saving file:", error)
        }
    }
}

但在这里我想作为 Doc-1、Doc-2、Doc-3.... 我该怎么做?

创建一个变量来存储文档计数并在每次保存到文档目录时递增它,然后在字符串中使用该值。

let documentKey = "documentIndex" 

@objc var documentIndex: Int {
    get { UserDefaults.value(forKey: documentKey) as? Int ?? 0 }
    set { UserDefaults.setValue(newValue, forKey: documentKey) }
}

func saveImageToDocumentDirectory(image: UIImage ) {
    let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
    
    documentIndex += 1
    
    let fileName = "Doc-\(documentIndex)"
    let fileURL = documentsDirectory.appendingPathComponent(fileName
    )
    if let data = image.jpegData(compressionQuality: 1.0),!FileManager.default.fileExists(atPath: fileURL.path){
        do {
            try data.write(to: fileURL)
            print("file saved")
        } catch {
            print("error saving file:", error)
        }
    }
}

您可以通过简单地存储图像的下一个索引来实现这一点。就像首先,当您将图像命名为 Doc-1 时,索引应为 1,然后索引中有 2,依此类推....

一种将此索引存储在 UserDefaults 中的方法,例如:

var nextImageIndex: Int {
    UserDefaults.standard.integer(forKey: "NextImageIndex") + 1  //+1 if you want to start with 1
}
    
func incrementImageIndex() {
    UserDefaults.standard.setValue(nextImageIndex, forKey: "NextImageIndex")
}

将上面的代码放在 UIViewController 的某处以查看它是否有效。

这是您更新后的方法...

func saveImageToDocumentDirectory(image: UIImage ) {
    guard let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else {
        return
    }
    
    let fileName = "Doc-\(nextImageIndex)"
    let fileURL = documentsDirectory.appendingPathComponent(fileName)
    let fileAlreadyExists = FileManager.default.fileExists(atPath: fileURL.path)
    if let data = image.jpegData(compressionQuality: 1.0), !fileAlreadyExists {
        do {
            try data.write(to: fileURL)
            incrementImageIndex()
            print("file saved")
        } catch {
            print("error saving file:", error)
        }
    }
}