Ist es möglich, optionale Initialisierungsparameter in Swift zu erstellen, damit ich ein Objekt aus JSON mit den vom API-Aufruf zurückgegebenen Werten erstellen kann, aber wenn ich das Objekt später speichere, kann ich auch die heruntergeladenen speichern UIImage für eine der URLs, die ich vorher bekommen habe.Swift 3 optionale Parameter
Beispiel:
class Story: NSObject, NSCoding {
var id: Int?
var title, coverImageURL: String?
var coverImage: UIImage?
required init?(anId: Int?, aTitle: String?, aCoverImageURL: String?) {
self.id = anId
self.title = aTitle
self.coverImageURL = aCoverImageURL
}
convenience init?(json: [String: Any]) {
let id = json["id"] as? Int
let title = json["title"] as? String
let coverImageURL = json["cover_image"] as? String
self.init(
anId: id,
aTitle: title,
aCoverImageURL: coverImageURL,
)
}
Dann Später möchte ich Objekte in den Speicher Sinn
//MARK: Types
struct PropertyKey {
static let id = "id"
static let title = "title"
static let coverImageURL = "coverImageURL"
static let coverImage = "coverImage"
}
//MARK: NSCoding
func encode(with aCoder: NSCoder) {
aCoder.encode(id, forKey: PropertyKey.id)
aCoder.encode(title, forKey: PropertyKey.title)
aCoder.encode(coverImageURL, forKey: PropertyKey.coverImageURL)
aCoder.encode(coverImage, forKey: PropertyKey.coverImage)
}
required convenience init?(coder aDecoder: NSCoder) {
guard let id = aDecoder.decodeObject(forKey: PropertyKey.id) as? Int else {
os_log("Unable to decode the id for a Story object.", log: OSLog.default, type: .debug)
return nil
}
guard let title = aDecoder.decodeObject(forKey: PropertyKey.title) as? String else {
os_log("Unable to decode the title for a Story object.", log: OSLog.default, type: .debug)
return nil
}
let coverImageURL = aDecoder.decodeObject(forKey: PropertyKey.coverImageURL) as? String
let coverImage = aDecoder.decodeObject(forKey: PropertyKey.coverImage) as? UIImage
self.init(
anId: id,
aTitle: title,
aCoverImageURL: coverImageURL,
coverImage: coverImage,
)
}
Macht dies zu retten? Ich möchte in der Lage sein, ein Story-Objekt zu speichern, sobald ich die Antwort von der API erhalte, aber später, wenn ich die Geschichte in den Speicher speichere, möchte ich die abgerufene UIImage für das CoverImage speichern können.
Wie würde ich das tun?
Also nur coverImage sollte optional sein –
BTW müssen Sie Ihre UIImage in Daten konvertieren, um es auf der Festplatte speichern zu können (encode) –
@LeoDabus richtig. – Arel