tl; dr
Очистите ваш проект после внесения структурных изменений. Используйте Shift + Command + K , затем создайте свой проект Command + R
Глядя на учебник , вам мало что нужно сделать, чтобы заставить его читать изображения из другой папки. Что важно, так это то, что изображения имеют уникальные имена и содержатся в комплекте приложения.
Внутри файла Data.swift
есть функция с именем loadImage(name:)
Я скопировал ее здесь, чтобы вы могли ее легко прочитать.
static func loadImage(name: String) -> CGImage {
guard
let url = Bundle.main.url(forResource: name, withExtension: "jpg"),
let imageSource = CGImageSourceCreateWithURL(url as NSURL, nil),
let image = CGImageSourceCreateImageAtIndex(imageSource, 0, nil)
else {
fatalError("Couldn't load image \(name).jpg from main bundle.")
}
return image
}
Они играют ключевую роль в этом let url = Bundle.main.url(forResource: name, withExtension: "jpg")
. Это просматривает весь ваш пакет приложений для ресурса с именем name
с указанным расширением файла. Как только он находит его, он возвращает url
ресурса в комплекте. Затем url
используется для открытия изображения.
Загрузка учебного проекта по вышеуказанной ссылке (и использование завершенного проекта);перемещение изображений в папку с именем img
внутри папки Resources
не нарушает работу приложения. И это все, что вам нужно сделать. Вам не нужно переименовывать какие-либо файлы внутри вашего проекта. Что приятно.
Одна вещь, которую вам нужно будет сделать, , и, вероятно, именно поэтому вы получаете эту ошибку , это очистить ваш проект перед его сборкой, особенно если вы вносите структурные изменения,Вы можете сделать это, перейдя в меню Product -> Clean Build Folder
, или вы также можете сделать это, нажав Shift + Команда + K
Вот что находится внутри моего проекта Xcode после перемещения файлов.

Вот что находится в моем каталоге

Почему вы должны использовать каталог активов?
Причина использования каталога активов в том, что он позволяет вам иметь разные размеры вашего изображения, это означает, что устройства с большим экраном могут показывать красивые большие изображения без потериразрешающая способность. Это также позволяет выполнять утончение приложений. Это процесс, при котором ресурсы, которые не требуются определенным устройствам, удаляются, что означает, что размер вашего приложения значительно меньше.
В каталогах активов также могут быть разные папки, и вы можетеиметь разные каталоги, что значительно упрощает управление активами, которые есть в вашем приложении.