ios - 字符串格式,如循环 swift4 中的表格
问题描述
我有这个问题,我在网上寻找的所有可能的解决方案都没有帮助我。有没有办法像字符串格式一样制作表格?
我期望字符串的输出是这样的:
Category
ITEM1 QTY PRICE TOTAL
ITEM2 QTY PRICE TOTAL
但我的输出代码是这样的:
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
解决方案
您可以将字符串填充到定义的长度:
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)
推荐阅读
- python - Boto3:TypeError:列表索引必须是整数或切片,而不是 str
- oracle-apex - 图片上传没有页面刷新和提交按钮
- mobx - Mobx 只观察数组中的特定对象
- php - Laravel 验证不适用于多字节字符
- sql - 具有 2 个值和一个日期列的 PIVOT 查询
- react-native - 存储在 s3 Bucket 上的图像未加载到物理设备上 - React Native
- sql - 从 Oracle 中均匀分布的值列表生成随机值
- html - 跨浏览器保持表情符号一致
- javascript - 如何在 asp.net 中使用 XMLHttpRequest 从带有 Post 方法的页面获取响应文本?
- sql - mssql cdc update_mask 过滤器更改仅在列 TS