Переключение между каталогами ресурсов программным способом и без него не предусмотрено ни в iOS, ни в Xcode (по крайней мере, не так, как вы описали), поэтому необходимо использовать какой-то обходной путь. Причина в том, что все xcassets в комплекте приложений загружены, и вы можете использовать образ во время выполнения из любого из них без возможности указать ресурс. Это может быть достигнуто с помощью iOS Resources Bundle
и XCAssets:
- Создать два
Resource Bundles
, назовите их, как вы пошли, они будут представлять коллекцию данных для ваших состояний. - В к каждому из пакетов добавьте
*.xcassets
и присвойте изображения - Создайте перечисление, представляющее состояние (я) вашего приложения
`
enum AppState {
case dog
case cat
var bundle: Bundle {
switch self {
case .dog:
return Bundle(identifier: "com.dog")!
case .cat:
return Bundle(identifier: "com.cat")!
}
}
`
И это все, вуаля. Вы можете сделать вашу жизнь проще, сделав расширение для изображения, по желанию, конечно. Я предполагаю, что вы будете использовать те же имена изображений, только состояния будут меняться.
extension UIImage {
func getImage(named: String, state: AppState) {
return UIImage(named: named, in: state.bundle!)
}
}
Надеюсь, это то, что вам нужно.