我有一个带有俱乐部->成员->交易的应用程序,它们是分层的。
现在我想实现功能,例如交易金额。交易的原因并不难,但是我无法为Double?
或textfield
分配可选类型的label
。
所以我的问题是:如何分配它?/如何将其转换为字符串?
向我显示此错误:Cannot invoke initializer for type 'String' with an argument list of type '(Double?)/(Date?)'
这是我的代码:
reasonlbl.text = transaction?.reason
dateLbl.text = String(transaction?.date)
amountLbl.text = String(transaction?.money)
答案 0 :(得分:2)
您可以尝试
if let money = transaction?.money {
amountLbl.text = "\(money)"
}
//
if let date = transaction?.date {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss" // set it as your format
dateLbl.text = formatter.string(from:date)
}
答案 1 :(得分:2)
理想情况下,您希望先进行安全检查,例如:
guard transaction = transaction else {
return
}
或
if let date = transaction.date {
...your code
}
如果需要,也可以分配默认值,如果transactoin对象为null
let date = transaction?.date ?? Date()
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd 'at' HH:mm"
let dateString = formatter.string(from: date)
另一种方法是:
amountLbl.text = "\(transaction?.money ?? 0)"
答案 2 :(得分:0)
amountLbl.text = String(format: "%f", transaction?.money)
日期也会发生类似的转换。
答案 3 :(得分:0)
要将数字转换为字符串,可以使用NumberFormatter
(documentation),它们是一个了不起的对象,因为它们不仅将数字转换为文本,反之亦然用户设备上的当前语言环境,例如,他们修改了十进制分隔符。
由于日期相同,您应该使用DateFormatter
(documentation)。
let formatter = NumberFormatter()
formatter.numberStyle = .currency
amountLbl.text = formatter.string(from: transaction!.money)
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
dateLbl.text = dateFormatter.string(from: transaction!.date)
请注意,transaction
对象使用了强制展开,但是您必须正确处理展开,否则它将崩溃。