2017-05-22 2 views
0

Betrachten Sie die App Speichern Sie keine Bilder in Modellen. Stattdessen werden URLs gespeichert, die zum Abrufen von Bildern aus dem Image-Cache verwendet werden.Ordnungsgemäße Methode zum Erstellen von Modellen auf dem Server

Betrachten Sie dieses Modell:

class Post { 
    let id: String 
    let title: String 
    let imageUrl: URL 
} 

die der Benutzer sagen Lassen Sie einen neuen Beitrag erstellt (tritt title und wählt ein image) und die App sendet sie an den Server über.

Frage: Was ist ein richtiger Weg, eine Methode zu schreiben, die einen neuen Beitrag auf dem Server erstellt?

Ich dachte, wie etwas zu schreiben:

func createModel(_ model: Post, completion:() -> Void) 

aber das Problem ist die App nicht imageUrl noch nicht kennt.

Ein weiterer Gedanke war es, ein Verfahren zu haben, der alle Eigenschaften des Modells akzeptieren:

func createPost(_ title: String, image: UIImage, completion:() -> Void) 

aber diese Lösung ist nicht wieder verwendbar: es unmöglich ist, für die Erstellung eines Modells eine generische Methode zu haben. Nicht gut.

Auch dieser Ansatz erlaubt uns nicht, das Modell zu verwenden, während es noch nicht im Backend gespeichert ist, wodurch er gezwungen ist, den Aktivitätsindikator anzuzeigen.

Irgendwelche Vorschläge, wie man damit umgeht?

Antwort

1

Wenn Sie wirklich unveränderliches Modell benötigen (was ich glaube nicht), dann können Sie Bilder im temporären Verzeichnis der App speichern und die lokalen Bilder für alle neu erstellten Beiträge und Serverbilder für alle anderen Beiträge verwenden. Auf diese Weise bleibt Ihr Modell gleich und Sie werden jeden Aktivitätsindikator los.

class Post { 

    let id: String 
    let title: String 
    var imageUrl: URL 

    init(id:String,title:String,imageUrl:URL){ 
     self.id = id 
     self.title = title 
     self.imageUrl = imageUrl 
    } 

    init(id:String,title:String,image:UIImage){ 

     self.id = id 
     self.title = title 

     let data = UIImageJPEGRepresentation(image, 0.8) 
     let url = URL(fileURLWithPath: "\(NSTemporaryDirectory())\(UUID().uuidString).jpeg") 
     try! data?.write(to: url, options: Data.WritingOptions.atomic) 
     self.imageUrl = url 
    } 
} 
Verwandte Themen