Xcode 10 - Bildliterale nicht mehr verfügbar

91

Versionshinweise zu Xcode 10: "Die Code-Vervollständigung für Swift-Bildliterale wurde in Xcode 10 entfernt."

Es ist also kein Fehler, dass ich dem Code keine Bilder hinzufügen (und ältere Projekte ausführen) konnte. Wie fügen wir dann von nun an Bilder in den Code ein, da durch einfaches Eingeben UIImageView(image:kein PNG oder JPEG akzeptiert wird?

let cellImage: UIImageView = {
    let image = UIImageView(image: ???))

    return image
}()

System: macOS Mojave
Xcode: Xcode 10 Beta 4

Pawel Cichonski
quelle
UIImage(named: "myImage")wie in
alten
Bemerkenswert: Nur die Code-Vervollständigung für Bildliterale wurde gelöscht . Die Bildliterale selbst funktionieren unter XCode 10 mit Swift 4.2 weiterhin einwandfrei.
iSofia
@isofia nein, tun sie nicht, weil du keine machen kannst.
Matt
3
Dies ist bedauerlich, die wörtliche Vervollständigung des Bildes war ein nettes Feature
Eric Armstrong
2
Möglicherweise funktionieren
JD.

Antworten:

117

In Xcode 10 und Swift 4.2 wurde nur die Code-Vervollständigungsfunktion (oder die automatische Vervollständigung) der Xcode-IDE für den alten Weg eingestellt. Hier ist der neue Weg:

Geben image literalSie einfach ein und es wird mit dem Standardsymbol vervollständigt.

Geben Sie hier die Bildbeschreibung ein

 

Doppelklicken Sie auf dieses Symbol, um die Medienbibliothek rechts davon zu öffnen.

Geben Sie hier die Bildbeschreibung ein

 

Wählen Sie einfach Ihr Bild und es funktioniert wie zuvor!

Geben Sie hier die Bildbeschreibung ein

Daniel Arantes Loverde
quelle
61
Auf diese Weise ist es unmöglich, ein Bild mit Namen zu finden. Und mein Designer hat mir alle Assets als Weiß-auf-Transparent-PNG gegeben, sodass alle Miniaturansichten in zufälliger Reihenfolge als reines Weiß gerendert werden. Welches Bild ich auswählen soll, ist unmöglich. -_-
Cœur
2
Hallo Coeur, bitte sagen Sie Ihrem Design, dass alle Bilder grau sein sollen, dann ändern Sie Ihre Assets in eine Vorlage und können sie dann auf Storyboard oder Code tönen :)
Daniel Arantes Loverde
Hier ist normal, Doppelklick öffnen Sie die Liste
Daniel Arantes Loverde
@ Cœur es ist nicht unmöglich, aber es ist schwierig, wenn Sie das Projekt durchlaufen, ist #imageLiteral nur eine grafische Darstellung einer tokenisierten Zeichenfolge, die es mit find durchsuchbar macht (#imageLiteral in Ihrem aktuellen Ordner) :)
Dominik Bucher
@DominikBucher es ist zwei Jahre her und jetzt verwende ich Xcode 12, also ist der Fluss, + + Loder die + Schaltfläche oben rechts von Xcode zu verwenden.
Cœur
97

Die Verknüpfung zum Öffnen der Registerkarte Medienbibliothek gefunden:

+ +M

Derzeit werden in der offiziellen Dokumentation einige Anwendungsfälle bei Xcode 10 Beta nicht behandelt, sodass ich keinen Weg finde, den Medienteil an die alte Position zu verschieben.

Ron Gahlot
quelle
7
So schlecht, dass ich nicht enter eingeben kann, um einen Artikel einzufügen. Ich muss den Mauszeiger verwenden, um das Element in den Code -.- zu ziehen
fl034
4
Die Medienbibliothek fügt jedoch kein richtiges Bildliteral ein. Sie fügt 3 Bildliterale ein, die sich auf die 3 verschiedenen Bildauflösungen beziehen.
Joshua Sullivan
Wenn Sie die ersten beiden löschen, funktioniert es immer noch. So chaotisch, Apple.
CIFilter
51

Sie können die Medienbibliothek in Xcode verwenden, um Ihrem Code ein Bildliteral hinzuzufügen:

XCode-Medienbibliothek anzeigen

Wählen Sie dann ein Bild aus der Bibliothek aus und ziehen Sie es per Drag & Drop in Ihren Code

Wählen Sie ein Bild aus der Bibliothek

Es wird ein Bildliteral erstellt

andrey.krukovskiy
quelle
Vielen Dank! Für andere: Im ersten Screenshot wird das LEFTMOST- Symbol {}
xaphod
3
Interessanterweise führte dies bei der Verwendung von PDF-Ressourcen zu ungültigen Bildliteralen für mich, was zu einem Laufzeitabsturz führte - im GM-Build.
David Ganster
15
Dies schafft ein Literal für jedes @1x, @2xund @3xAsset und wird daher nicht kompiliert
Zappel
2
Ernsthaft, wie soll das funktionieren? Gibt es keine Möglichkeit, eine Darstellung aller drei Auflösungen per Drag & Drop zu verschieben? Dies scheint ein großes Versehen von Apple zu sein.
aBikis
27

Für andere mit Legacy-Code, der Swift Image Literals verwendet, sind der Code und die Syntax der Image Literal-Funktion selbst weiterhin gültig und funktionieren in Xcode 10 mit Swift 4.2 einwandfrei.

Es ist nicht erforderlich, vorhandenen Code, der diese Bildliterale verwendet, zurückzusetzen oder umzugestalten, und sie können weiterhin wie folgt verwendet werden:

imageView.image = #imageLiteral(resourceName: imageNameString)

Nur die Code-Vervollständigungsfunktion (oder die automatische Vervollständigung) der Xcode-IDE wurde eingestellt.


AKTUALISIEREN

Der Unterschied in der bildliteralen Darstellung in früheren und aktuellen Versionen oder in Xcode / Swift:

image = #imageLiteral(resourceName: "flower.jpg")

image = #imageLiteral (resourceName: "flower.jpg")

Wie der Auszug zeigt, wurden Bildliterale in Übereinstimmung mit Miniaturansichten ihres tatsächlichen Bildes dargestellt. Jetzt wird jedoch nur ein generisches Symbol an seiner Stelle verwendet. Vermutlich wird dadurch die Belastung der IDE verringert, indem der Aufwand für die Handhabung und Anzeige der Inline-Miniaturansichten entfällt.

iSofia
quelle
2
Wissen wir, warum Apple das herausgenommen hat? Werden Bildliterale in Zukunft abgeschrieben?
Bryan Hill
@BryanHill Keine Erklärung gegeben, die ich kenne. Aber ich habe meine Antwort oben mit einer Best-Guess aktualisiert.
ISofia
Ich habe das markiert, wenn Sie ein generisches Symbol anstelle des Bildes sehen. dann stürzt Ihre Anwendung an dieser Stelle ab.
Badal Shah
Irgendwie wurden plötzlich Miniaturansichten inline angezeigt, als ich die Zeile auswählte, die sie enthielt (Xcode 10.0 (10A255)).
fl034
2
Ich denke, es ist nur ein Fehler
Reid Ellis
17

TIPP: Zum Korrigieren von drei Auflösungen nach dem Hinzufügen eines Literalbilds im Code.
1. Entfernen Sie ein anderes, behalten Sie nur ein Bild bei.
2. Kommentieren Sie Ihren Zeilencode mit einem Literalbild. Dann erscheint ein Literalbild im Code wie: #imageLiteral(resourceName: "[email protected]"
3. Im resourceNameWert entfernen @2xund Dateierweiterung, wie .png: #imageLiteral(resourceName: "image")
Behalten Sie nur den Bildnamen bei : 4. Kommentieren Sie aus! Das Bild wird im Code angezeigt.

Wesley Gomes
quelle
4
Vielen Dank. Was für ein tobendes Müllcontainerfeuer XCode-
Bildliterale sind
1
(Mir hat es einfach gefallen raging dumpster fire;)).
Chris Prince
Vielen Dank, dies ist eine gute Möglichkeit, das tatsächlich zu verwenden image name(behält es aber weiterhin als Bildliteral bei), anstatt es aus der Auswahl auswählen zu müssen.
Anglin
7

In Xcode 11 befindet sich die Medienbibliothek jetzt unter Ansicht> Bibliothek anzeigen (UMSCHALT + CMD + L).

Samwize
quelle
5

Wenn jemand Xcode 11 verwendet , können Sie alle Medien mit der folgenden Option finden:

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Guru
quelle
2
  • Die Verwendung von UIImage (imageLiteralResourceName: 'imageName') gibt kein optionales Ergebnis zurück und funktioniert einwandfrei
Francis Ken
quelle
0

Ich benutze Xcode 10 Beta 4 und ich habe das gleiche Problem! Auf die alte Weise behoben, um ein Bild zu übergeben

PizzaModel(
            nome: "Marinara",
            ingredienti: "Pomodoro, Aglio",
            calorie: "729",
            img: UIImage(named: "marinara")!
)
Gianlo
quelle