В настоящее время нет способа запросить каталог активов, чтобы программно сказать вам, какие все активы он содержит. то есть, нет никакого API, imho, которое позволило бы вам выбирать имена цветов (или другие имена активов), которые вы добавили в Каталог активов.
Вы можете, конечно, получить цвет / актив, если вы уже знаете имя.
Более того, каталог ресурсов компилируется в Assets.car
, что невозможно прочитать, поэтому попытки прочитать этот файл также бесполезны.
В любом случае ... возвращаясь к вашему делу, вам придется вручную поддерживать какой-то механизм, например Enum
, для отслеживания цветов.
Решение:
- Добавить цвет в Каталог активов; скажем по имени "WeirdOrange"
Используйте Enum
для сохранения имен ваших пользовательских цветов, например:
enum Colors: String {
//... previous cases
case weirdOrange = "WeirdOrange" //... now we add this one
}
Используйте его в приложении как:
UIColor(named: Colors.weirdOrange.rawValue)
* 1 028 * Пример:
Позволяет немного подстроить его для вашей цели:
enum Colors: String, CaseIterable {
case funkyMunky = "FunkyMunky"
case weirdOrange = "WeirdOrange"
case popBlue = "PopBlue"
case murkyPoo = "MurkyPoo"
static var assetCatalogued: [UIColor] {
return self.allCases.compactMap { (colorCase) -> UIColor? in
return UIColor(named: colorCase.rawValue)
}
}
}
for color in Colors.assetCatalogued {
//Do something
print(color)
}
Примечание:
- Для запуска примера измените названия цветов или добавьте цвета с заданными именами, иначе
Colors.assetCatalogued
не вернет UIColor
s
- Используется
CaseIterable
для .allCases
- При добавлении / удалении соответствующего цветового актива вам придется вручную добавить / удалить регистр