Формат строки как таблица в цикле swift4 - PullRequest
0 голосов
/ 02 октября 2019

У меня есть эта проблема, и все возможные решения, которые я ищу в Интернете, не помогли мне. Есть ли способ сделать таблицу как в строковом формате?

Что я ожидаю, что вывод будет таким для строки:

Category
 ITEM1     QTY     PRICE      TOTAL
 ITEM2     QTY     PRICE      TOTAL

, но мой выходной код похож наthis:

Category
 ITEM1         QTY     PRICE      TOTAL
 ITEM2      QTY      PRICE      TOTAL

Category
 ITEM1             QTY       PRICE        TOTAL
 ITEM2       QTY        PRICE      TOTAL

Я выяснил кое-что, что длина строки элемента - это стоимость, почему они не выровнены формально в моем формате, но есть ли способ, как решить эту проблему? Я совершенно новичок в Swift.

вот мой код:

for category in self.categoryList {
        sentence += "Category: \(category)\n"
        for items in self.productList {
            if category == items.category {
                grandTotal += Double(items.qty)! * Double(items.price)!
                let total: Double = Double(items.qty)! * Double(items.price)!
                let item = (items.item as NSString).utf8String
                let qty  = (items.qty as NSString).utf8String
                let price = (items.price as NSString).utf8String
                sentence += String(format: "%-10s%20s%15s%15.02f\n", item!, qty!, price!, total)
            }
        }
        sentence += "\n\n"
        grandTotal = 0
    }

    lblData.text = sentence

1 Ответ

0 голосов
/ 02 октября 2019

Вы можете дополнить свои строки до определенной длины:

let elements = ["ITEM1", "QTY", "PRICE", "TOTAL"]

// without padding
var sentence = ""
for e in elements {
    if !sentence.isEmpty {
        sentence += " "
    }
    sentence += e
}

print(sentence)
// prints "ITEM1 QTY PRICE TOTAL"

// with padding
sentence = ""
for e in elements {
    sentence += e.padding(toLength: 10, withPad: " ", startingAt: 0)
}

print(sentence)
// prints "ITEM1     QTY       PRICE     TOTAL     "

Или в более короткой форме:

// without padding
var sentence = elements.joined(separator: " ")
print(sentence)

// with padding
sentence = elements.map({$0.padding(toLength: 10, withPad: " ", startingAt: 0)}).joined(separator: " ")
print(sentence)
...