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


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


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.


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


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.


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: "image@2x.png"
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.


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).


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


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

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")!
)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.