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

时间:2018-07-18 14:13:08

标签: ios swift xcode uitextfield uilabel

我有一个带有俱乐部->成员->交易的应用程序,它们是分层的。 现在我想实现功能,例如交易金额。交易的原因并不难,但是我无法为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)

4 个答案:

答案 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)

要将数字转换为字符串,可以使用NumberFormatterdocumentation),它们是一个了不起的对象,因为它们不仅将数字转换为文本,反之亦然用户设备上的当前语言环境,例如,他们修改了十进制分隔符。
由于日期相同,您应该使用DateFormatterdocumentation)。

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对象使用了强制展开,但是您必须正确处理展开,否则它将崩溃。