我从JSON中获得了一系列值,其中一个由totalBuy
定义,该值定义为bool
struct PurchaseTotals: Codable {
var totalBuy: Double?
enum CodingKeys: String, CodingKey {
case sumTotal = "totalBuy"
}
}
当我尝试将此double分配为标签的文本时,可选单词会出现在前面:
我正在这样分配值:
sumLabel.text = "\(totalBuy)"
如何删除“可选”一词?
此外,可以在必要时格式化标签中的值以包含逗号,totalBuy
的值有时看起来像"1000"
,其中需要逗号在一个(1,000).
之后吗?
答案 0 :(得分:1)
我认为yuou正在寻找NumberFormatter
// If I have a value for totalBuy go ahead
if let totalBuy = totalBuy {
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
let formattedString = formatter.string(from: NSNumber(value: totalBuy)) ?? ""
sumLabel.text = "\(formattedString)"
} else {
sumLabel.text = ""
}
答案 1 :(得分:1)
首先,Codable
中case
enum CodingKeys
中的名称必须与您的property
类型中的Codable
完全匹配。
所以,它看起来应该像
struct PurchaseTotals: Codable {
var sumTotal: Double?
enum CodingKeys: String, CodingKey {
case sumTotal = "totalBuy"
}
}
在上面的代码中,sumTotal
是属性名称,totalBuy
是必须从API获得的密钥。反之,则可以相应地更改代码。
问题1
现在,由于sumTotal
是optional
,这就是为什么要在label
中打印可选内容的原因。
在使用sumTotal
之前,您需要解包。
问题2
现在,由于需要在使用sumTotal
之前对其进行格式化,因此可以在PurchaseTotals
本身中创建一个变量,该变量将返回formattedSumTotal
字符串。
所以,合并后的代码就像
struct PurchaseTotals: Codable {
var sumTotal: Double?
enum CodingKeys: String, CodingKey {
case sumTotal = "totalBuy"
}
lazy var formattedSumTotal: String? = {
if let sumTotal = sumTotal {
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
let str = formatter.string(from: NSNumber(value: sumTotal))
return str
}
return nil
}()
}
使用formattedSumTotal
之类的
label.text = purchaseTotals.formattedSumTotal