Xcode 10 - литералы изображений больше не доступны


95

Примечания к выпуску 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")как в старые времена (?)
Alladinian

Обратите внимание: исключено завершение кода только для литералов изображений . Сами литералы изображений продолжают нормально работать в XCode 10 с Swift 4.2.
iSofia

@isofia нет, они этого не делают, потому что вы не можете его сделать.
Мэтт

3
это прискорбно, буквальное завершение изображения было хорошей особенностью
Эрик Армстронг

Ответы:


124

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

Просто введите, image literalи он будет завершен со значком по умолчанию.

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

 

Дважды щелкните этот значок, и справа от него откроется медиа-библиотека.

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

 

Просто выберите свой имидж, и он будет работать как раньше!

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


63
Так невозможно найти изображение по имени. И мой дизайнер предоставил мне все ресурсы в виде белого на прозрачном png, поэтому все миниатюры отображаются как чисто белые в случайном порядке ... какое изображение выбрать - задача невозможна. -_-
Cœur

2
Привет, Кер, пожалуйста, скажите своему дизайну, чтобы все изображения были серыми, затем вы измените свои активы на шаблон, а затем вы можете подкрасить его на раскадровке или в коде :)
Даниэль Арантес Ловерде

Это нормально, дважды щелкните список, чтобы открыть список
Даниэль Арантес Ловерде

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

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

98

Нашел ярлык для открытия вкладки медиабиблиотеки:

+ +M

На данный момент официальная документация не охватывает некоторые варианты использования бета-версии Xcode 10, поэтому я не могу найти способ переместить мультимедийную часть в старую позицию.


7
Так плохо, что я не могу ввести ввод, чтобы вставить элемент. Мне нужно использовать курсор мыши, чтобы перетащить элемент в код -.-
fl034

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

Если удалить первые два, он по-прежнему работает. Так грязно, Apple.
CIFilter

53

Вы можете использовать медиа-библиотеку в Xcode, чтобы добавить в код литерал изображения:

Показать медиа-библиотеку XCode

А затем выберите изображение из библиотеки и перетащите его в свой код.

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

Это создаст буквальное изображение


Благодарность! Для других: на первом скриншоте нажата иконка LEFTMOST {}
xaphod

3
Интересно, что это создало для меня недопустимые литералы изображений при использовании ресурсов pdf, что привело к сбою во время выполнения - в сборке GM.
Дэвид Ганстер

15
Это создает по одному литералу для каждого @1x, @2xи @3xактива и, таким образом, не компилируется
Zappel

2
Серьезно, как это должно работать? Нет ли возможности перетащить одно представление всех трех разрешений? Это похоже на огромную оплошность со стороны Apple.
aBikis

28

В интересах других, использующих унаследованный код, использующий литералы изображений Swift, код и синтаксис самой функции литерала изображения по-прежнему действительны и отлично работают в Xcode 10 с Swift 4.2.

Нет необходимости откатывать или реорганизовывать существующий код, который использует эти литералы изображений, и их по-прежнему можно использовать следующим образом:

imageView.image = #imageLiteral(resourceName: imageNameString)

Только функция завершения кода (или автозаполнение) Xcode IDE была прекращена.


ОБНОВИТЬ

Разница в представлении изображения-литерала в предыдущих и текущих версиях или Xcode / Swift:

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

image = #imageLiteral (resourceName: "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 сейчас находятся в пн
xaphod 01

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

Спасибо, это хороший способ фактически использовать image name(но по-прежнему сохраняет его как литерал изображения) вместо того, чтобы выбирать из средства выбора.
Angtlin

8

В Xcode 11 медиа-библиотека теперь находится в меню «Просмотр»> «Показать библиотеку» (SHIFT + CMD + L).


7

Если кто-то использует 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.