У меня есть следующий протокол:
public protocol ImagesContainer {
associatedtype ImageName: RawRepresentable where ImageName.RawValue == String
static var bundle: Bundle? { get }
}
с реализацией, подобной этой
struct ImagesMain: ImagesContainer {
public static var bundle: Bundle? { return .main }
public enum ImageName: String {
case loading, success, error
case profile, address
}
}
struct ImagesUser: ImagesContainer {
public static var bundle: Bundle? { return .main }
public enum ImageName: String {
case profile, address, country
}
}
, поэтому обычно я использовал это в структурах модели
struct ViewModel {
let icon: ImagesMain.ImageName
}
что хорошо для одного ImagesContainer
. Но у меня есть один такой контейнер для каждого пакета, и я хотел бы смешивать и сопоставлять их при создании этих моделей представления. На данный момент они всегда привязаны к одному ImagesContainer
. Я хотел бы обобщить это, так что я могу указать любой ImageName из любого ImagesContainer
.
что-то вроде
struct ViewModel {
let profileIcon<T: ImagesContainer>: (T, T.ImageName)
let addressIcon<T: ImagesContainer>: (T, T.ImageName)
}
Я не могу поместить это в саму структуру, потому что там может быть несколько свойств с различными ImagesContainer
с и так далее. Есть ли способ получить автономный дженерик c?