edit / update:
Xcode 8 beta • Swift 3
It is not recommended to store images in NSUserDefaults, but if you really want to do this, you need to save it as NSData.
value : NSData, NSString, NSNumber, NSDate, NSArray NSDictionary. NSArray NSDictionary
"". NSUserDefaults, :) :
extension UserDefaults {
func set(image: UIImage?, forKey key: String) {
guard let image = image else {
set(nil, forKey: key)
return
}
set(UIImageJPEGRepresentation(image, 1.0), forKey: key)
}
func image(forKey key:String) -> UIImage? {
guard let data = data(forKey: key), image = UIImage(data: data )
else { return nil }
return image
}
func set(imageArray value: [UIImage]?, forKey key: String) {
guard let value = value else {
set(nil, forKey: key)
return
}
set(NSKeyedArchiver.archivedData(withRootObject: value), forKey: key)
}
func imageArray(forKey key:String) -> [UIImage]? {
guard let data = data(forKey: key),
imageArray = NSKeyedUnarchiver.unarchiveObject(with: data) as? [UIImage]
else { return nil }
return imageArray
}
}
:
let myImage = UIImage(data: try! Data(contentsOf: URL(string:"https://i.stack.imgur.com/Xs4RX.jpg")!))!
UserDefaults.standard().set(image: myImage, forKey: "anyKey")
if let myLoadedImage = UserDefaults.standard().image(forKey:"anyKey") {
print(myLoadedImage.size)
}
let myImagesArray = [myImage, myImage]
UserDefaults.standard().set(imageArray: myImagesArray, forKey: "imageArrayKey")
if let myLoadedImages = UserDefaults.standard().imageArray(forKey:"imageArrayKey") {
print(myLoadedImages.count)
}