![](/img/trans.png)
[英]iOS/Swift: Can't assign optional String to UILabel text property
[英]Assign an optional value to a UItextfield / UIlabel which aren't a string
我有一个应用程序,其中包含俱乐部->成员->交易,它们是分层的。 现在,我要实现该功能,以编辑例如交易金额。 交易的原因并不难,但是我不能指定Double?
的可选类型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)
你可以试试
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)
}
理想情况下,您希望在执行安全检查之前先这样做,例如:
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)"
amountLbl.text = String(format: "%f", transaction?.money)
日期也会发生类似的转换。
要将数字转换为字符串,可以使用NumberFormatter
( 文档 ),它们是一个了不起的对象,因为它们不仅将数字转换为文本,反之亦然,而且还考虑了用户设备上的当前语言环境,例如,它们进行了修改小数点分隔符。
对于相同的日期,您应该使用DateFormatter
( 文档 )。
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
对象使用了强制解包的transaction
,但是您必须处理正确的解包,否则它将崩溃。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.