繁体   English   中英

为不是字符串的UItextfield / UIlabel分配一个可选值

[英]Assign an optional value to a UItextfield / UIlabel which aren't a string

我有一个应用程序,其中包含俱乐部->成员->交易,它们是分层的。 现在,我要实现该功能,以编辑例如交易金额。 交易的原因并不难,但是我不能指定Double?的可选类型Double? textfieldlabel

所以我的问题是:如何分配它?/如何将其转换为字符串?

向我显示此错误: 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM