如何在 Swift 中临时存储图像和字符串?

How to temporally store Images and Strings in Swift?

非常简单的问题 - 如何在 Swift 中临时存储图像、字符串和双精度值?

我的应用从服务器获取ID,使用这个ID应用可以从服务器请求下载图片,然后另一个请求可以获取String和Double。 然后应用程序必须显示带有相应 String 和 Double 的图像。 所有下载的数据都应在应用程序被终止后删除,并在应用程序启动后再次下载。

使用自定义 class 是个好主意吗?

例如,客户 class:

class UserInformation: NSObject {
var string: String
var double: Double
var image: String

init(string: String, double: Double, image: String) {
    self.string = string
    self.double = double
    self.image = image
    }
}

然后保存和访问数据:

var info = [UserInformation]()

func save() {
     //Alamofire functions to download image and string, double values goes here

     var newImage = //Downloaded image from server
     var newString = //Downloaded String from server
     var newDouble = //Downloaded Double from server

     //Save image
     let imageName = NSUUID().UUIDString
     let imagePath = getDocumentsDirectory().stringByAppendingPathComponent(imageName)
     if let jpegData = UIImageJPEGRepresentation(newImage, 80) {
         jpegData.writeToFile(imagePath, atomically: true)
     }

     let userInfo = UserInformation(string: newString, double: newDouble, image: imageName)
     info.append(userInfo)
 }

     func load() {
     //For ex. I am using [0], although in my app
     //it would be for _ in _ loop to access all existing values
     let info = UserInformation[0]
     string.text = info.string
     double.double = info.double
     let path = getDocumentsDirectory().stringByAppendingPathComponent(info.image)
     imageView.image = UIImage(contentsOfFile: path)
}

func getDocumentsDirectory() -> NSString {
    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    let documentsDirectory = paths[0]
    return documentsDirectory
}

EDIT 我意识到使用 NSUserData(如我的示例)是存储数据的可能方式,我不确定这是否是个好主意,就我而言

我个人很喜欢Haneke and AwesomeCache。两者都写在 Swift.

关于数据持久化的注意事项:

iOS有很多持久化数据存储方案,例如:

等等

但我怀疑您实际上不想将任何东西存储更长的时间。我认为您正在尝试实现的是默认 iOS 行为。根据您的数据的复杂程度,您可以:

  • 使用上面的示例(如果您的数据非常复杂)- 您可以存储所有数据并在应用启动时擦除它。
  • 重构 singleton pattern 你的 UserInformation。这将使您的 UserInformation 实例持续存在,直到您的应用被终止。

快速查看您的代码后,第二个选项更适合您的情况。

你想要的名字是"Persistent Data"。您可以通过多种方法实现这一目标: 1.可以使用第三方库 2. 将数据保存在 plist 文件或 CoreData 或 UserDefaults 中。您可以创建一个包含任何您想要的内容的字典,UI 对象除外,例如 UIImage。您可以在 NSData 中转换 UIImage,然后保存 NSData。

最简单的方法是保存在 NSUserDefaults 中。那里有一个如何做到这一点的例子:Save images in NSUserDefaults?