SwiftUI не может передать EnvironmentValues ​​через дочернее представлениеIOS

Программируем под IOS
Ответить
Anonymous
 SwiftUI не может передать EnvironmentValues ​​через дочернее представление

Сообщение Anonymous »

У меня есть представление SwiftUI (назовем его X), которое состоит из разных компонентов. Один из компонентов (назовем его Y) устанавливает EnvironmentValues(backgroundType) для своей нисходящей иерархии, которая отличается от заданной родительским представлением X.

Код: Выделить всё

struct ParentViewX: View {
@ObservedObject private var viewModel: ViewModel

init(viewModel: ViewModel) {
self.viewModel = viewModel
}

var body: some View {
VStack(alignment: .center, spacing: 0) {
switch viewModel.state {
case .visible(let data):
ScrollView {
VStack(alignment: .leading, spacing: 0) {
ForEach(data.header) { component in
component.buildWith(action: viewModel.handleAction)
}
}
.environment(\.backgroundType, data.header.background)
}
default:
EmptyView()
}
}
}
}
При создании различных компонентов существует компонент Badge, который передает другое значение для backgroundType.

Код: Выделить всё

struct Badge: SwiftUI.View {
struct Model: ComponentModelType {
let id: String = "\(UUID())"
let label: MyText.Model
let background: Background
}

let model: Model

var body: some SwiftUI.View {
MyText(model: model.label)
.environment(\.backgroundType, model.background)
}
}

struct MyText: View {
struct Model: ComponentModelType {
let id: String = "\(UUID())"
let content: String
let color: MyTextColor?
}

let model: Model
@Environment(\.backgroundType) var backgroundType

var body: some View {
Label(model.content)
.textColor(model.color ?? textColor())
.fixedSize(horizontal: false, vertical: true)
.multilineTextAlignment(.leading)
}

private func textColor() -> MyTextColor {
switch backgroundType {
case .one:
return .primary
case .two:
return .secondary
default:
return .primaryInverse
}
}
}
Таким образом, MyText должен получить значение backgroundType, равное .two, поскольку оно передается Badge. Однако он получает значение .one.
Кажется, я не могу понять, в чем может быть проблема!
Что я делаю не так?

Подробнее здесь: https://stackoverflow.com/questions/786 ... child-view
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»