knuspermagier.de

Since 2005.

Serie: SwiftUI-Kennenlernen
Bilder einfügen

OK Google, “SwiftUI Imagepicker”. Aha, wieder was wrappen. Theoretisch gibt’s das auch als Paket über den Swift Package Manager, aber da es nur ein paar Zeilen sind, kopiere ich sie auch erstmal rein.

Die Einbindung erfolgt nun auch wieder, etwas gewöhnungsbedürftig, in dem man Folgendes mit an den View klatscht, und über einen Button showImagePicker auf true setzt.

.sheet(isPresented: $showImagePicker) {
    ImagePicker(img: $image), isPresented: self.$showImagePicker)
}

Was so einfach aussieht klappte bei mir auch erstmal nicht, da er, immer wenn ich das Bild auswählte, crashte, weil ihm irgendwas am $image nicht gefiel, irgendein Fehler mit verschachtelten Binding<> Geschichten. Naja. Ich versuchte es danach, auf diese sehr schmutzig anmutende Art und Weise:

ImagePicker(img: Binding(
    get: { nil },
    set: { (newValue) in
        print("image selected")
}), isPresented: self.$showImagePicker)

… und das klappte erstmal. Da ich, sobald das Bild ausgewählt wurde, den Upload starten wollte, um den KirbyTag zu generieren, brauchte ich eh noch eine Möglichkeit, herauszufinden, wann eben das passiert ist. Daher kam mir das ganz gelegen.


Nach dem Rumgeärgere mit diesem Binding-Kram war ich schon kurz vor der großen Demotivation, dachte mir aber, dass ich zumindest noch den Bild-Upload schnell bauen konnte.

Offensichtlich ist es aber ein Dateiupload per URLSession ungefähr tausend mal anstrengender, als ihn z.B. in der Shortcuts-App zusammenzuklicken. Alle Code-Beispiele die ich fand, liefen darauf hinaus, dass man die Multipart-Boundaries selber setzen muss, und hä, ich hätte gehofft, es ist einfach sowas wie request.file = image.path und fertig. Naja. So langsam stiegen die Zweifel, ob ich wirklich eine App zum bloggen brauche, denn umso weiter ich kam, desto mehr fiel mir ein, was man eigentlich noch machen müsste, damit es benutzbar ist — und ist es dann wirklich besser, als das Panel?

Also klar, ich hätte jetzt den AFNetworking-Nachfolger einbinden können, damit wären File-Uploads sicher einfach gewesen, aber meine Lust war vorbei.


Aktueller Nerv-Status:


Wie traurig bin ich über die verschwendete Zeit? Erfahrt es im Fazit!

Post-Serie SwiftUI-Kennenlernen:

Kommentare, Feedback und andere Anmerkungen? Schreib mir eine E-Mail 🤓