Использование запроса IF возвращает ошибку в Xcode - PullRequest
0 голосов
/ 01 февраля 2020

Когда я пытаюсь установить запрос If в Xcode (Swift & SwiftUI) в представлении, я получаю следующую ошибку: Невозможно вызвать 'padding' со списком аргументов типа '(Double)'.

Как только я закомментирую оператор If, код работает без проблем. В следующем коде я закомментировал оператор If.

Что я могу сделать, чтобы избежать вывода ошибки? Ошибка выводится при .padding (0.0)

    var body: some View {
    NavigationLink(destination: TransactionDetail(product: product)) {
        HStack {

            Text("X")
                .font(.largeTitle)
                .clipShape(Circle())
                .foregroundColor(.green)
                .overlay(Circle().stroke(Color.green, lineWidth: 1))
                .shadow(radius: 5)

            VStack(alignment: .leading) {
                HStack {
                   Text(product.name)
                        .font(.headline)
                        .foregroundColor(.black)
                }
                Text("21. Januar")
                    .font(.caption)
                    .foregroundColor(.black)
            }
            Spacer()
            Text("\(product.price),00 €")
                .font(.caption)
                .padding(2)
                /*
                if product.price > 0 {
                    .foregroundColor(.black)
                } else {
                    .foregroundColor(.black)
                }
                */
                .cornerRadius(5)
        }
        .padding(0.0)
    }
}

Ответы [ 2 ]

2 голосов
/ 01 февраля 2020

Эта проблема не связана с SwiftUI. Проблема в том, что оператор if не имеет значения. В вашем примере

if product.price > 0 {
    .foregroundColor(.black)
} else {
    .foregroundColor(.black)
}

не оценивает вызов метода, который можно применить к представлению Text.

Вот простой пример, который не будет компилироваться:

var uc = true
let string = "Hello World"
            if uc {
                .uppercased()
            } else {
                .lowercased()
            }

Самое простое решение в вашем случае будет

Text("\(product.price),00 €")
    .font(.caption)
    .padding(2)
    .foregroundColor(product.price > 0 ? .red : .green)
    .cornerRadius(5)

с условным выражением в качестве параметра цвет переднего плана.

0 голосов
/ 01 февраля 2020

вы не можете использовать «обычные» команды в SwiftUI - это другая концепция. Нормальные утверждения вы можете иметь в функциях, но не в теле. Возможно, вам следует прочитать некоторые статьи об основах SwiftUI.

Мартин прав в своем предложении ....

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