Xcode 10 - Les littéraux d'image ne sont plus disponibles


93

Notes de version de Xcode 10: "L'achèvement du code pour les littéraux d'image Swift a été supprimé dans Xcode 10"

Ce n'est donc pas un bogue que je ne puisse pas ajouter d'images dans le code (et exécuter des projets plus anciens). Comment ajouter des images à partir de maintenant dans le code, car la simple saisie UIImageView(image:n'acceptera aucun png ou jpeg.

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

    return image
}()

Système: macOS Mojave
Xcode: Xcode 10 Beta 4


UIImage(named: "myImage")comme dans ye olde times (?)
Alladinian

À noter: seule la complétion de code pour les littéraux d'image a été supprimée . Les littéraux d'image eux-mêmes continuent de fonctionner correctement sur XCode 10 avec Swift 4.2.
iSofia

@isofia non, car vous ne pouvez pas en créer un.
mat

3
c'est malheureux, la finition littérale de l'image était une fonctionnalité intéressante
Eric Armstrong

Réponses:


119

Dans Xcode 10 et Swift 4.2 , seule la fonction de complétion de code (ou auto-complétion) de l'IDE Xcode a été abandonnée pour l'ancienne méthode. Voici la nouvelle façon:

Tapez simplement image literalet il se terminera avec l'icône par défaut.

entrez la description de l'image ici

 

Double-cliquez sur cette icône et cela ouvrira la bibliothèque multimédia à droite de celle-ci.

entrez la description de l'image ici

 

Choisissez simplement votre image et cela fonctionne comme avant!

entrez la description de l'image ici


62
Il est impossible de trouver une image par son nom de cette façon. Et mon designer m'a donné tous les atouts sous forme de png blanc sur transparent, de sorte que toutes les vignettes sont rendues en blanc pur dans un ordre aléatoire ... quelle image choisir est une mission impossible. -_-
Cœur

2
Salut Coeur, s'il vous plaît, dites à votre conception de mettre toute l'image sur gris, puis vous changez vos actifs en modèle, puis vous pouvez le teinter sur Storyboard ou code :)
Daniel Arantes Loverde

Voici normal, double-cliquez pour ouvrir la liste
Daniel Arantes Loverde

@ Cœur ce n'est pas impossible mais c'est difficile, si vous passez par un projet, #imageLiteral est juste une représentation graphique d'une chaîne tokenisée, ce qui la rend consultable avec find (#imageLiteral dans votre dossier actuel) :)
Dominik Bucher

@DominikBucher ça fait deux ans et maintenant j'utilise Xcode 12, donc le flux est d'utiliser + + Lou le bouton + en haut à droite de Xcode.
Cœur du

98

Vous avez trouvé le raccourci pour ouvrir l'onglet Médiathèque:

+ +M

À ce stade, la documentation officielle ne couvre pas certains cas d'utilisation de Xcode 10 beta, je ne suis donc pas en mesure de trouver un moyen de déplacer la partie média vers l'ancienne position.


7
Tellement mauvais que je ne peux pas taper entrer pour insérer un élément. Je dois utiliser le curseur de la souris pour faire glisser l'élément dans le code -.-
fl034

4
La médiathèque n'insère pas de littéral d'image approprié, cependant ... elle insère 3 littéraux d'image faisant référence aux 3 résolutions d'image différentes.
Joshua Sullivan

Si vous supprimez les deux premiers, cela fonctionne toujours. Tellement désordonné, Apple.
CIFilter

51

Vous pouvez utiliser la bibliothèque multimédia dans Xcode pour ajouter une image littérale à votre code:

Afficher la bibliothèque multimédia XCode

Et puis choisissez l'image de la bibliothèque et faites-la glisser dans votre code

Choisissez une image dans la bibliothèque

Cela créera une image littérale


Merci! Pour les autres: dans la première capture d'écran, l' icône LEFTMOST est enfoncée {}
xaphod

3
Fait intéressant, cela a créé des littéraux d'image invalides pour moi lors de l'utilisation de ressources pdf, ce qui a entraîné un crash d'exécution - dans la version GM.
David Ganster

15
Cela crée un littéral pour chaque @1x, @2xet l' @3xactif et donc ne compile pas
Zappel

2
Sérieusement, comment est-ce censé fonctionner? N'existe-t-il aucun moyen de glisser-déposer une représentation des trois résolutions? Cela semble être un énorme oubli d'Apple.
aBikis

28

Pour le bénéfice des autres avec un code hérité qui utilise Swift Image Literals, le code et la syntaxe de la fonction d'image littérale eux - mêmes sont toujours valides et fonctionnent parfaitement bien dans Xcode 10 avec Swift 4.2.

Il n'est pas nécessaire de restaurer ou de refactoriser le code existant qui utilise ces littéraux d'image, et ils peuvent toujours être utilisés comme suit:

imageView.image = #imageLiteral(resourceName: imageNameString)

Seule la fonction de complétion de code (ou d'auto-complétion) de l'IDE Xcode a été abandonnée.


METTRE À JOUR

La différence de représentation d'image littérale dans les versions précédentes et actuelles ou Xcode / Swift:

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

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

Comme l'illustre l'extrait, les littéraux d'image étaient représentés en ligne avec les vignettes de leur image réelle. Cependant, maintenant, seule une icône générique est utilisée à sa place. Vraisemblablement, cela permet de réduire la charge de travail de l'EDI, en éliminant les frais généraux liés à la manipulation et à l'affichage des vignettes en ligne.


2
Savons-nous pourquoi Apple a supprimé cela? Les images littérales vont-elles être dépréciées à l'avenir?
Bryan Hill

@BryanHill Aucune explication donnée, que je sache. Mais j'ai mis à jour ma réponse, ci-dessus, avec une meilleure estimation.
iSofia du

J'ai marqué cela lorsque vous verrez une icône générique à la place de l'image. alors votre application plantera à cet endroit.
Badal Shah

D'une manière ou d'une autre, j'ai soudainement eu des miniatures affichées en ligne lorsque j'ai sélectionné la ligne la contenant (Xcode 10.0 (10A255)).
fl034

2
Je pense que c'est juste un bug
Reid Ellis

18

CONSEIL: Pour corriger trois résolutions après avoir ajouté une image littérale dans le code.
1. Supprimez une autre, ne gardez qu'une seule image
2. Commentez votre code de ligne avec une image littérale, puis apparaîtra l'image littérale dans le code, comme: #imageLiteral(resourceName: "image@2x.png"
3. en resourceNamevaleur, supprimer @2xet extension de fichier, comme .png, ne conserver que le nom de l'image: #imageLiteral(resourceName: "image")
4. Décommenter! L'image sera affichée dans le code.


4
Merci. Qu'est-ce qu'une benne à ordures déchaînée, les littéraux d'image XCode sont au mo
Xaphod

1
(J'ai juste aimé raging dumpster fire;)).
Chris Prince

Merci, c'est un bon moyen de pouvoir utiliser le image name(mais le conserve toujours comme une image littérale) au lieu d'avoir à sélectionner dans le sélecteur.
angtlin

7

Dans Xcode 11, la médiathèque se trouve maintenant sous Affichage> Afficher la bibliothèque (SHIFT + CMD + L).


6

Si quelqu'un utilise Xcode 11, vous pouvez trouver tous les médias en utilisant l'option ci-dessous:

entrez la description de l'image ici

entrez la description de l'image ici


Mais cela n'insère que le chemin vers l'image?
Ixx le

Oui, son chemin d'insertion seulement, mais c'est ainsi que vous pouvez vérifier tous les littéraux d'image
guru

2
  • l'utilisation de UIImage (imageLiteralResourceName: 'imageName') ne retournera pas une option et fonctionne très bien

0

J'utilise Xcode 10 beta 4 et j'ai le même problème! Résolu en utilisant l'ancienne méthode pour transmettre une image

PizzaModel(
            nome: "Marinara",
            ingredienti: "Pomodoro, Aglio",
            calorie: "729",
            img: UIImage(named: "marinara")!
)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.