Xcode 10: los literales de imagen ya no están disponibles

93

Notas de la versión de Xcode 10: "La finalización de código para los literales de imagen Swift se ha eliminado en Xcode 10"

Entonces no es un error que no pueda agregar imágenes en el código (y ejecutar proyectos más antiguos). ¿Cómo podemos agregar imágenes a partir de ahora en el código, ya que simplemente escribir UIImageView(image:no aceptará ningún png o jpeg?

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

    return image
}()

Sistema: macOS Mojave
Xcode: Xcode 10 Beta 4

Pawel Cichonski
fuente
UIImage(named: "myImage")como en los viejos tiempos (?)
Alladiniano
Notable: solo se ha eliminado la finalización de código para literales de imagen . Los literales de la imagen en sí mismos continúan funcionando bien en XCode 10 con Swift 4.2.
iSofia
@isofia no, no lo hacen porque no puedes hacer uno.
Matt
3
esto es desafortunado, la finalización literal de la imagen fue una buena característica
Eric Armstrong
2
Posible duplicado de sugerencias
JD.

Respuestas:

119

En Xcode 10 y Swift 4.2 , solo la función de finalización de código (o autocompletar) del Xcode IDE se ha descontinuado de la forma anterior. Aquí está la nueva forma:

Simplemente escriba image literaly se completará con el icono predeterminado.

ingrese la descripción de la imagen aquí

 

Haga doble clic en este icono y se abrirá la biblioteca de medios en el lado derecho.

ingrese la descripción de la imagen aquí

 

¡Simplemente elija su imagen y funcionará como antes!

ingrese la descripción de la imagen aquí

Daniel Arantes Loverde
fuente
62
Es imposible encontrar una imagen por su nombre de esta manera. Y mi diseñador me dio todos los recursos como PNG blanco sobre transparente, por lo que todas las miniaturas se representan en blanco puro en un orden aleatorio ... qué imagen elegir es una misión imposible. -_-
Cœur
2
Hola Coeur, por favor, dígale a su diseño que ponga toda la imagen en gris, luego cambie sus activos a plantilla y luego puede teñirlo en Storyboard o código :)
Daniel Arantes Loverde
Aquí es normal, haga doble clic en abrir la lista
Daniel Arantes Loverde
@ Cœur, no es imposible pero es difícil, si pasa por el proyecto, #imageLiteral es solo una representación gráfica de una cadena tokenizada, lo que hace que se pueda buscar con find (#imageLiteral en su carpeta actual) :)
Dominik Bucher
@DominikBucher han pasado dos años y ahora estoy usando Xcode 12, por lo que el flujo es usar + + Lo el botón + en la parte superior derecha de Xcode.
Cœur
98

Encontré el acceso directo para abrir la pestaña Biblioteca de medios:

+ +M

En este punto, la documentación oficial no cubre algunos casos de uso en Xcode 10 beta, por lo que no puedo encontrar una manera de mover la parte multimedia a la posición anterior.

Ron Gahlot
fuente
7
Tan mal que no puedo escribir enter para insertar un elemento. Tengo que usar el cursor del mouse para arrastrar el elemento al código -.-
fl034
4
La biblioteca de medios no inserta un literal de imagen adecuado, aunque ... coloca 3 literales de imagen que se refieren a las 3 resoluciones de imagen diferentes.
Joshua Sullivan
Si elimina los dos primeros, todavía funciona. Tan desordenado, Apple.
CIFilter
51

Puede usar la biblioteca multimedia en Xcode para agregar literal de imagen a su código:

Mostrar biblioteca de medios XCode

Y luego elija la imagen de la biblioteca y arrástrela y suéltela en su código

Elija la imagen de la biblioteca

Creará una imagen literal

andrey.krukovskiy
fuente
¡Gracias! Para otros: en la primera captura de pantalla, se presiona el ícono LEFTMOST {}
xaphod
3
Curiosamente, esto creó literales de imagen no válidos para mí al usar recursos PDF, lo que resultó en un bloqueo del tiempo de ejecución, en la compilación de GM.
David Ganster
15
Esto crea un literal para cada @1x, @2xy @3xactivo y, por lo tanto, no se compila
Zappel
2
En serio, ¿cómo se supone que funciona esto? ¿No hay forma de arrastrar y soltar una representación de las tres resoluciones? Esto parece un gran descuido de Apple.
aBikis
28

Para beneficio de otros con código heredado que utiliza los literales de imagen Swift, el código y la sintaxis de la función literal de la imagen siguen siendo válidos y funcionan perfectamente en Xcode 10 con Swift 4.2.

No es necesario revertir o refactorizar el código existente que utiliza estos literales de imagen, y aún se pueden usar de la siguiente manera:

imageView.image = #imageLiteral(resourceName: imageNameString)

Solo se ha descontinuado la función de finalización de código (o autocompletar) del Xcode IDE.


ACTUALIZAR

La diferencia en la representación literal de la imagen en las versiones anteriores y actuales o Xcode / Swift:

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

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

Como ilustra el extracto, los literales de imágenes se representaron en línea con miniaturas de su imagen real. Sin embargo, ahora, solo se usa un ícono genérico en su lugar. Presumiblemente, esto apunta a reducir la carga del IDE, al eliminar los gastos generales de manejo y mostrar las miniaturas en línea.

iSofia
fuente
2
¿Sabemos por qué Apple sacó esto? ¿Se depreciarán los literales de imagen en el futuro?
Bryan Hill
@BryanHill No se ha dado ninguna explicación, que yo sepa. Pero actualicé mi respuesta, arriba, con una mejor suposición.
iSofia
Lo he marcado cuando verá un icono genérico en lugar de la imagen. entonces su aplicación fallará en ese lugar.
Badal Shah
De alguna manera, de repente aparecieron miniaturas en línea cuando seleccioné la línea que las contenía (Xcode 10.0 (10A255)).
fl034
2
Creo que es solo un error
Reid Ellis
18

SUGERENCIA: Para corregir tres resoluciones después de agregar una imagen literal en el código.
1. Quite otra, conserve solo una imagen
2. Comente su código de línea con una imagen literal, luego aparecerá una imagen literal en el código, como: #imageLiteral(resourceName: "[email protected]"
3. en resourceNamevalor, elimine @2xy extensión de archivo, como .png, mantenga solo el nombre de la imagen: #imageLiteral(resourceName: "image")
4. ¡Descomente! La imagen se mostrará en código.

Wesley Gomes
fuente
4
Gracias. Que furioso incendio de basurero son los literales de imagen de XCode en el mes
xaphod
1
(Simplemente me gustó raging dumpster fire;)).
Chris Prince
Gracias, esta es una buena manera de poder usar el image name(pero aún lo mantiene como una imagen literal) en lugar de tener que seleccionar desde el selector.
angtlin
7

En Xcode 11, la biblioteca de medios ahora está en Ver> Mostrar biblioteca (SHIFT + CMD + L).

samwize
fuente
6

Si alguien usa Xcode 11 , puede encontrar todos los medios usando la siguiente opción:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

gurú
fuente
¿Pero esto inserta solo el camino a la imagen?
Ixx
Sí, es solo insertar ruta, pero esta es la forma en que puede verificar todos los literales de la imagen
guru
2
  • el uso de UIImage (imageLiteralResourceName: 'imageName') no devolverá un opcional y funciona bien
Francis Ken
fuente
0

¡Estoy usando Xcode 10 beta 4 y tengo el mismo problema! Resuelto usando la forma antigua de pasar una imagen

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