Разбиение выражения на подвыражения - PullRequest
2 голосов
/ 09 февраля 2020

Если я пишу следующий код, я получаю это сообщение об ошибке:

Компилятор не может проверить это выражение в разумные сроки; попробуйте разбить выражение на отдельные подвыражения

Если я удаляю оператор if / else, он работает. Но я бы хотел сначала указать значение или валюту, в зависимости от валюты. Так как бы вы взломали этот код?

 if item.currency == "%" {

      Text(item.currency)
           .font(.system(size: 14, design: .rounded))
           .padding(.bottom, 0)
           .frame(width: 100, alignment: .center)

      Text(item.value)
           .font(.system(size: 24, design: .rounded))
           .fontWeight(.heavy)
           .frame(width: 100, alignment: .center)

 } else {

      Text(item.value)
           .font(.system(size: 24, design: .rounded))
           .fontWeight(.heavy)
           .frame(width: 100, alignment: .center)

      Text(item.currency)
           .font(.system(size: 14, design: .rounded))
           .padding(.bottom, 0)
           .frame(width: 100, alignment: .center)

 }

1 Ответ

1 голос
/ 09 февраля 2020

Если я использую предоставленный снимок в качестве единственного содержимого представления body, ошибки не возникает, поэтому я предполагаю, что это является частью гораздо более сложной иерархии представления. Для таких случаев я предпочитаю разбивать такую ​​структуру на явное свойство представления, как в следующем примере

var body: some View {
    ItemCurrencyView // << usage
}

private var ItemCurrencyView: some View { // < separated view builder
    Group {
        if item.currency == "%" {

            Text(item.currency)
                .font(.system(size: 14, design: .rounded))
                .padding(.bottom, 0)
                .frame(width: 100, alignment: .center)

            Text(item.value)
                .font(.system(size: 24, design: .rounded))
                .fontWeight(.heavy)
                .frame(width: 100, alignment: .center)

        } else {

            Text(item.value)
                .font(.system(size: 24, design: .rounded))
                .fontWeight(.heavy)
                .frame(width: 100, alignment: .center)

            Text(item.currency)
                .font(.system(size: 14, design: .rounded))
                .padding(.bottom, 0)
                .frame(width: 100, alignment: .center)
        }
    }
}

, в качестве варианта это может быть также функция ItemCurrencyView, если предпочтительнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...