Xcode 10 - literais de imagem não estão mais disponíveis

93

Notas de versão do Xcode 10: "Completação de código para literais de imagem Swift foi removida no Xcode 10"

Portanto, não é um bug eu não conseguir adicionar imagens no código (e executar projetos mais antigos). Como podemos adicionar imagens a partir de agora no código, já que apenas digitar UIImageView(image:não aceitará nenhum png ou jpeg.

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

    return image
}()

Sistema: macOS Mojave
Xcode: Xcode 10 Beta 4

Pawel Cichonski
fonte
UIImage(named: "myImage")como nos
velhos
Digno de nota: apenas o auto-completar de código para literais de imagem foi descartado . Os próprios literais de imagem continuam a funcionar bem no XCode 10 com Swift 4.2.
iSofia
@isofia não, eles não querem porque você não pode fazer um.
matt
3
Isso é lamentável, a conclusão literal da imagem era um bom recurso
Eric Armstrong
2
Possível duplicata de sugestões
JD.

Respostas:

119

No Xcode 10 e Swift 4.2 , apenas a função de autocompletar código (ou autocompletar) do Xcode IDE foi descontinuado para o modo antigo. Aqui está a nova maneira:

Basta digitar image literale ele será concluído com o ícone padrão.

insira a descrição da imagem aqui

 

Clique duas vezes neste ícone e ele abrirá a biblioteca de mídia à direita dele.

insira a descrição da imagem aqui

 

É só escolher sua imagem e funciona como antes!

insira a descrição da imagem aqui

Daniel Arantes Loverde
fonte
62
É impossível encontrar uma imagem pelo nome dessa forma. E meu designer me deu todos os recursos como png branco sobre transparente, então todas as miniaturas são renderizadas como branco puro em uma ordem aleatória ... qual imagem escolher é uma missão impossível. -_-
Cœur
2
Olá Coeur, por favor, diga ao seu design para colocar toda a imagem em cinza, então você muda seus ativos para template, e então você pode tingi-los no Storyboard ou código :)
Daniel Arantes Loverde
Aqui é normal, clique duas vezes para abrir a lista
Daniel Arantes Loverde
@ Cœur não é impossível, mas é difícil, se você passar pelo projeto, #imageLiteral é apenas uma representação gráfica de uma string tokenizada, o que a torna pesquisável com find (#imageLiteral em sua pasta atual) :)
Dominik Bucher
@Dominik Budaper já faz dois anos e agora estou usando o Xcode 12, então o fluxo é usar + + Lou o botão + no canto superior direito do Xcode.
Cœur
98

Encontrou o atalho para abrir a guia Biblioteca de mídia:

+ +M

Neste ponto, a documentação oficial não cobre alguns casos de uso no Xcode 10 beta, então não consigo encontrar uma maneira de mover a parte da mídia para a posição anterior.

Ron Gahlot
fonte
7
Tão ruim que não consigo digitar enter para inserir um item. Preciso usar o cursor do mouse para arrastar o item para o código -.-
fl034
4
A biblioteca de mídia não insere um literal de imagem adequado, embora ... coloque 3 literais de imagem referentes às 3 resoluções de imagem diferentes.
Joshua Sullivan
Se você excluir os dois primeiros, ainda funcionará. Tão bagunçado, Apple.
CIFilter de
51

Você pode usar a Biblioteca de mídia no Xcode para adicionar literal de imagem ao seu código:

Mostrar biblioteca de mídia XCode

E, em seguida, escolha a imagem da biblioteca e arraste e solte no seu código

Escolha uma imagem da biblioteca

Vai criar uma imagem literal

andrey.krukovskiy
fonte
Obrigado! Para outros: na primeira captura de tela, o ícone LEFTMOST é pressionado {}
xaphod
3
curiosamente, isso criou literais de imagem inválidos para mim ao usar recursos de pdf, resultando em um travamento do tempo de execução - na construção GM.
David Ganster
15
Isso cria um literal para cada @1x, @2xe @3xativos e, portanto, não compilar
Zappel
2
Sério, como isso deveria funcionar? Não há como arrastar e soltar uma representação de todas as três resoluções? Isso parece um grande descuido da Apple.
aBikis
28

Para o benefício de outras pessoas com código legado que utiliza literais de imagem Swift, o código e a sintaxe da função literal de imagem em si ainda são válidos e funcionam perfeitamente no Xcode 10 com Swift 4.2.

Não há necessidade de reverter ou refatorar o código existente que utiliza esses literais de imagem, e eles ainda podem ser usados ​​da seguinte maneira:

imageView.image = #imageLiteral(resourceName: imageNameString)

Apenas a função de autocompletar código (ou autocompletar) do Xcode IDE foi descontinuada.


ATUALIZAR

A diferença na representação literal de imagem nas versões anteriores e atuais ou Xcode / Swift:

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

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

Como o extrato ilustra, os literais de imagem foram representados em linha com miniaturas de sua imagem real. No entanto, agora, apenas um ícone genérico é usado em seu lugar. Presumivelmente, isso reduz a carga sobre o IDE, eliminando as despesas gerais de manipulação e exibição de miniaturas em linha.

iSofia
fonte
2
Nós sabemos por que a Apple tirou isso? Os literais de imagem serão depreciados no futuro?
Bryan Hill
@BryanHill Nenhuma explicação dada, que eu saiba. Mas eu atualizei minha resposta, acima, com uma melhor estimativa.
iSofia
Eu marquei isso quando você verá um ícone genérico no lugar da imagem. então seu aplicativo irá travar naquele lugar.
Badal Shah
De alguma forma, eu de repente tive miniaturas exibidas inline quando selecionei a linha que as continha (Xcode 10.0 (10A255)).
fl034 de
2
Acho que é apenas um bug
Reid Ellis
18

DICA: para corrigir três resoluções após adicionar uma imagem literal no código.
1. Remova outro, mantenha apenas uma imagem
2. Comente seu código de linha com a imagem literal, então aparecerá a imagem literal no código, como: #imageLiteral(resourceName: "[email protected]"
3. em resourceNamevalor, remova @2xe extensão do arquivo, como .png, mantenha apenas o nome da imagem: #imageLiteral(resourceName: "image")
4. Remova o comentário! A imagem será mostrada em código.

Wesley Gomes
fonte
4
Obrigado. O que uma fúria lixo XCode fogo literais de imagem estão no mo
xaphod
1
(Eu apenas gostei raging dumpster fire;)).
Chris Prince
Obrigado, esta é uma boa maneira de realmente poder usar o image name(mas ainda mantê-lo como uma imagem literal) em vez de ter que selecionar no seletor.
angtlin 01 de
7

No Xcode 11, a biblioteca de mídia agora está em Exibir> Mostrar biblioteca (SHIFT + CMD + L).

Samwize
fonte
6

Se alguém usar o Xcode 11 , poderá encontrar todas as mídias usando a opção abaixo:

insira a descrição da imagem aqui

insira a descrição da imagem aqui

guru
fonte
Mas isso insere apenas o caminho para a imagem?
Ixx
Sim, é apenas um caminho de inserção, mas é assim que você pode verificar todos os literais de imagem
guru
2
  • usar UIImage (imageLiteralResourceName: 'imageName') não retornará um opcional e funciona bem
Francis Ken
fonte
0

estou usando o Xcode 10 beta 4 e tenho o mesmo problema! Resolvido usando a maneira antiga de passar uma imagem

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