Xcode 10: i valori letterali delle immagini non sono più disponibili


93

Note di rilascio di Xcode 10: "Il completamento del codice per i valori letterali di immagine Swift è stato rimosso in Xcode 10"

Quindi non è un bug il fatto che non potessi aggiungere immagini nel codice (ed eseguire progetti più vecchi). Come possiamo quindi aggiungere immagini d'ora in poi nel codice dato che la semplice digitazione UIImageView(image:non accetterà alcun png o jpeg.

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

    return image
}()

Sistema: macOS Mojave
Xcode: Xcode 10 Beta 4


UIImage(named: "myImage")come ai vecchi tempi (?)
Alladiniano

Degno di nota: è stato eliminato solo il completamento del codice per i letterali immagine . Le stesse immagini letterali continuano a funzionare bene su XCode 10 con Swift 4.2.
iSofia

@isofia no non lo fanno perché non puoi crearne uno.
opaco

3
questo è un peccato, il completamento letterale dell'immagine era una bella caratteristica
Eric Armstrong,

2
Possibili duplicati dei suggerimenti
JD.

Risposte:


119

In Xcode 10 e Swift 4.2 , solo la funzione di completamento del codice (o completamento automatico) dell'IDE Xcode è stata interrotta per la vecchia modalità. Ecco il nuovo modo:

Basta digitare image literale verrà completato con l'icona predefinita.

inserisci qui la descrizione dell'immagine

 

Fare doppio clic su questa icona e si aprirà la libreria multimediale sul lato destro di essa.

inserisci qui la descrizione dell'immagine

 

Scegli la tua immagine e funziona come prima!

inserisci qui la descrizione dell'immagine


62
È impossibile trovare un'immagine per nome in questo modo. E il mio designer mi ha dato tutte le risorse come png bianco su trasparente, quindi tutte le miniature sono rese come bianco puro in un ordine casuale ... quale immagine scegliere è impossibile. -_-
Cœur

2
Ciao Coeur, per favore, dì al tuo design di mettere tutta l'immagine in grigio, quindi cambi le tue risorse in modello, quindi puoi colorarlo su Storyboard o codice :)
Daniel Arantes Loverde

Qui è normale, fare doppio clic per aprire l'elenco
Daniel Arantes Loverde

@ Cœur non è impossibile ma è difficile, se segui il progetto, #imageLiteral è solo una rappresentazione grafica di una stringa tokenizzata, che lo rende ricercabile con find (#imageLiteral nella tua cartella corrente) :)
Dominik Bucher

@DominikBucher sono passati due anni e ora sto usando Xcode 12, quindi il flusso è usare + + Lo il pulsante + in alto a destra di Xcode.
Cœur

98

Trovato il collegamento per aprire la scheda Libreria multimediale:

+ +M

A questo punto la documentazione ufficiale non copre alcuni casi d'uso in Xcode 10 beta, quindi non sono in grado di trovare un modo per spostare la parte multimediale nella vecchia posizione.


7
Così male che non riesco a digitare Invio per inserire un elemento. Devo usare il cursore del mouse per trascinare l'elemento nel codice -.-
fl034

4
La libreria multimediale non inserisce un letterale immagine corretto, però ... inserisce 3 letterali immagine che si riferiscono alle 3 diverse risoluzioni dell'immagine.
Joshua Sullivan

Se elimini i primi due, funziona ancora. Così disordinato, Apple.
CIFilter

51

Puoi utilizzare Media Library in Xcode per aggiungere un'immagine letterale al tuo codice:

Mostra la libreria multimediale XCode

Quindi scegli l'immagine dalla libreria e trascinala sul tuo codice

Scegli l'immagine dalla libreria

Creerà un'immagine letterale


Grazie! Per altri: nel primo screenshot, viene premuta l' icona LEFTMOST {}
xaphod

3
È interessante notare che questo creava valori letterali di immagine non validi per me quando utilizzavo risorse pdf, provocando un arresto anomalo del runtime - nella build GM.
David Ganster,

15
Questo crea un letterale per ciascuno @1x, @2xe @3xasset e quindi non viene compilato
Zappel

2
Sul serio, come dovrebbe funzionare? Non c'è modo di trascinare e rilasciare una rappresentazione di tutte e tre le risoluzioni? Questa sembra un'enorme svista da parte di Apple.
aBikis

28

A beneficio di altri con codice legacy che utilizza Swift Image Literals, il codice e la sintassi della funzione letterale dell'immagine stessa sono ancora validi e funzionano perfettamente in Xcode 10 con Swift 4.2.

Non è necessario eseguire il rollback o il refactoring del codice esistente che utilizza questi letterali immagine e possono ancora essere utilizzati come segue:

imageView.image = #imageLiteral(resourceName: imageNameString)

Solo la funzione di completamento del codice (o completamento automatico) dell'IDE Xcode è stata interrotta.


AGGIORNARE

La differenza nella rappresentazione letterale dell'immagine nelle versioni precedenti e attuali o Xcode / Swift:

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

immagine = #imageLiteral (resourceName: "fiore.jpg")

Come illustra l'estratto, i letterali immagine sono stati rappresentati in linea con le miniature della loro immagine effettiva. Tuttavia, ora, al suo posto viene utilizzata solo un'icona generica. Presumibilmente, questo serve a ridurre il carico sull'IDE, eliminando i costi generali di gestione e visualizzazione delle miniature in linea.


2
Sappiamo perché Apple lo ha tolto? I letterali immagine verranno ammortizzati in futuro?
Bryan Hill

@BryanHill Nessuna spiegazione data, che io sappia. Ma ho aggiornato la mia risposta, sopra, con una ipotesi migliore.
iSofia

L'ho contrassegnato quando vedrai un'icona generica al posto dell'immagine. allora la tua applicazione andrà in crash in quel punto.
Badal Shah

In qualche modo ho improvvisamente visualizzato le miniature in linea quando ho selezionato la riga che lo contiene (Xcode 10.0 (10A255)).
fl034

2
Penso che sia solo un bug
Reid Ellis

18

SUGGERIMENTO: per correggere tre risoluzioni dopo aver aggiunto un'immagine letterale nel codice.
1. Rimuovine un'altra, mantieni solo un'immagine
2. Commenta il tuo codice di linea con un'immagine letterale, quindi apparirà un'immagine letterale nel codice, come: #imageLiteral(resourceName: "image@2x.png"
3. in resourceNamevalore, rimuovi @2xed estensione del file, come .png, mantieni solo il nome dell'immagine: #imageLiteral(resourceName: "image")
4. Rimuovi il commento! L'immagine verrà mostrata in codice.


4
Grazie. Che furioso fuoco di cassonetto, i letterali dell'immagine XCode sono al mo
xaphod

1
(Mi è appena piaciuto raging dumpster fire;)).
Chris Prince

Grazie, questo è un buon modo per poter effettivamente utilizzare il image name(ma lo mantiene comunque come un'immagine letterale) invece di dover selezionare dal selettore.
angtlin

7

In Xcode 11, la libreria multimediale è ora in Visualizza> Mostra libreria (MAIUSC + CMD + L).


6

Se qualcuno utilizza Xcode 11 , puoi trovare tutti i media utilizzando l'opzione seguente:

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


Ma questo inserisce solo il percorso dell'immagine?
Ixx

Sì, è solo il percorso di inserimento, ma questo è il modo in cui puoi controllare tutte le immagini letterali
guru

2
  • l'utilizzo di UIImage (imageLiteralResourceName: 'imageName') non restituirà un opzionale e funziona perfettamente

0

Sto usando Xcode 10 beta 4 e ho lo stesso problema! Risolto utilizzando il vecchio modo per passare un'immagine

PizzaModel(
            nome: "Marinara",
            ingredienti: "Pomodoro, Aglio",
            calorie: "729",
            img: UIImage(named: "marinara")!
)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.