Xcode 10 - графічні літерали більше не доступні


93

Примітки до випуску Xcode 10: "Завершення коду для Swift-літералів зображень видалено в Xcode 10"

Отже, це не помилка, через яку я не міг додати зображення в код (і запустити старіші проекти). Як ми тоді додаємо зображення до цього коду, оскільки просто введення UIImageView(image:не сприйме жодного png чи jpeg.

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

    return image
}()

Система: macOS Mojave
Xcode: Xcode 10 Beta 4


UIImage(named: "myImage")як за старих часів (?)
Алладініан

Примітно: відмінено лише заповнення коду для літералів зображень . Самі графічні літерали продовжують чудово працювати на XCode 10 із Swift 4.2.
iSofia

@isofia ні, вони цього не роблять, бо ти не можеш зробити.
матовий

3
це прикро, буквальне завершення зображення було приємною рисою
Ерік Армстронг,

Відповіді:


119

У Xcode 10 та Swift 4.2 лише функція заповнення коду (або автозаповнення) Xcode IDE була припинена за старим способом. Ось новий спосіб:

Просто введіть, image literalі він завершиться значком за замовчуванням.

введіть тут опис зображення

 

Двічі клацніть на цю піктограму, і вона відкриє медіатеку праворуч від неї.

введіть тут опис зображення

 

Просто виберіть свою ілюстрацію, і вона буде працювати як раніше!

введіть тут опис зображення


62
Неможливо знайти зображення за назвою таким чином. І мій дизайнер передав мені всі активи у вигляді білого на прозорому png, тому всі ескізи відображаються як чисто білі у випадковому порядку ... вибрати зображення неможливо. -_-
Cœur

2
Привіт Кер, будь ласка, скажіть своєму дизайну, щоб все зображення було розміщено на сірому кольорі, потім ви зміните свої активи на шаблон, а потім зможете підфарбувати його на Раскадровці або коді :)
Даніель Арантес Ловерде

Тут нормально, подвійне клацання відкрийте список
Даніель Арантес Ловерде

@ Cœur це не неможливо, але це важко, якщо ви пройдете проект, #imageLiteral - це просто графічне зображення маркерного рядка, що робить його можливим для пошуку за допомогою find (#imageLiteral у вашій поточній папці) :)
Домінік Бухер,

@DominikBucher минуло два роки, і зараз я використовую Xcode 12, тож потік повинен використовувати + + Lабо кнопку + вгорі праворуч від Xcode.
Cœur

98

Знайшов ярлик для відкриття вкладки Медіатека:

+ +M

На даний момент офіційна документація не охоплює деяких випадків використання в Xcode 10 beta, тому я не можу знайти спосіб перемістити медіа-частину у старе положення.


7
Так погано, що я не можу ввести Enter, щоб вставити елемент. Мені потрібно за допомогою курсору миші перетягнути елемент у код -.-
fl034

4
Медіатека не вставляє належний літерал зображення, однак ... вона вкладає 3 літерали зображень із посиланням на 3 різні роздільні здатності зображень.
Джошуа Салліван

Якщо видалити перші два, це все одно працює. Такий безладний, Apple.
CIFilter

51

Ви можете використовувати медіатеку в Xcode, щоб додати в свій код літерал зображень:

Показати медіатеку XCode

А потім виберіть зображення з бібліотеки та перетягніть його до свого коду

Виберіть зображення з бібліотеки

Це створить графічний образ


Дякую! Для інших: на першому знімку екрана натиснуто піктограму LEFTMOST {}
xaphod

3
що цікаво, це створило для мене недійсні графічні літерали при використанні pdf-ресурсів, що призвело до аварійного завершення роботи - у збірці GM.
Девід Ганстер,

15
Це створює по одному літералу для кожного @1x, @2xі @3xактиву, і, отже, не компілюється
Zappel

2
Серйозно, як це має працювати? Чи неможливо перетягнути одне зображення всіх трьох резолюцій? Це здається величезним наглядом з боку Apple.
aBikis

28

На користь інших із застарілим кодом, який використовує Swift Image Literals , код і синтаксис самої функції literal image все ще діють і чудово працюють у Xcode 10 з Swift 4.2.

Немає необхідності відкотувати або рефакторувати існуючий код, який використовує ці літерали зображень, і їх все одно можна використовувати наступним чином:

imageView.image = #imageLiteral(resourceName: imageNameString)

Лише функцію завершення коду (або автозаповнення) Xcode IDE припинено.


ОНОВЛЕННЯ

Різниця у графічному поданні зображень у попередній та поточній версіях або Xcode / Swift:

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

image = #imageLiteral (ім'я ресурсу: "flower.jpg")

Як ілюструє витяг, графічні літерали були представлені в рядку із мініатюрами їх фактичного зображення. Однак зараз замість нього використовується лише загальна піктограма. Імовірно, це йде до зменшення навантаження на IDE, шляхом усунення накладних витрат на обробку та відображення вбудованих ескізів.


2
Чи знаємо ми, чому Apple вийняла це? Чи будуть амортизовані літерали зображення в майбутньому?
Брайан Хілл,

@BryanHill Жодного пояснення, про яке я знаю, не дано. Але я оновив свою відповідь вище, з найкращим здогадком.
iSofia

Я зазначив, що коли ви побачите загальну піктограму замість зображення. тоді ваша програма розвалиться в цьому місці.
Бадал-Шах,

Якось я раптом отримав ескізи, що відображаються в рядку, коли я вибрав рядок, що його містить (Xcode 10.0 (10A255)).
fl034

2
Я думаю, це просто помилка
Рід Елліс,

18

ПОРАДА. Щоб виправити три роздільні здатності після додавання буквального зображення в код.
1. Видаліть інше, залиште лише одне зображення
2. Прокоментуйте код рядка буквальним зображенням, після чого з’явиться буквальне зображення в коді, наприклад: #imageLiteral(resourceName: "image@2x.png"
3. за resourceNameзначенням видаліть @2xі розширення файлу, наприклад .png, залиште лише ім’я зображення: #imageLiteral(resourceName: "image")
4. Розкоментуйте! Зображення буде показано в коді.


4
Дякую. Який бурхливий смітник вистрілює графічні літерали
XCode

1
(Мені просто сподобалось raging dumpster fire;)).
Кріс Принс

Дякуємо, це хороший спосіб насправді мати можливість використовувати image name(але все ще зберігає його як літерал зображення) замість того, щоб вибирати із засобу вибору.
angtlin

7

У Xcode 11 медіатека тепер знаходиться у меню Перегляд> Показати бібліотеку (SHIFT + CMD + L).


6

Якщо хтось використовує Xcode 11, ви можете знайти всі носії, використовуючи наведену нижче опцію:

введіть тут опис зображення

введіть тут опис зображення


Але це вставляє лише шлях до зображення?
Ixx

Так, шлях лише для вставки, але таким чином ви можете перевірити всі літерали зображень
гуру

2
  • використання UIImage (imageLiteralResourceName: 'imageName') не поверне необов’язковий і працює нормально

0

я використовую Xcode 10 beta 4, і у мене така ж проблема! Вирішено за допомогою старого способу передачі зображення

PizzaModel(
            nome: "Marinara",
            ingredienti: "Pomodoro, Aglio",
            calorie: "729",
            img: UIImage(named: "marinara")!
)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.