我正在开发一个花费跟踪器应用程序。 Al逻辑现在正在工作但是当我想在UILable中显示交易数据时,它将其显示为optional("String")
我已经浏览过互联网并试图以两种不同的方式展开字符串,但我无法修复它。
添加!到字符串的末尾会出现错误Cannot force unwrap value of non-optional type "String"
以下是我现在使用的代码,显示optional("String")
在这里我设置了我的结构和数组
struct Transaction {
var discr = ""
var amount = 0
}
var transactions = [Transaction]()
这是我向数组添加数据的方式
transactions.append(Transaction( discr: String(describing: transDescrInput.text), amount: Int(tempAmount)))
这就是我在tableview中显示数据的方式
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = transTable.dequeueReusableCell(withIdentifier: "sCell")
let discrText = transactions[indexPath.row].discr.uppercased()
cell?.textLabel?.text = "€\(transactions[indexPath.row].amount)"
cell?.detailTextLabel?.text = "\(discrText)"
return cell!
}
这就是它在应用中的显示方式
答案 0 :(得分:3)
问题已经存在于向阵列添加数据的位置。
假设transDescrInput.text
是可选字符串,
String(describing: transDescrInput.text)
返回非可选字符串"Optional(text...)"
,并且有
没有明智的方法来恢复它。您应该使用可选绑定
或者其他展开机制,例如
if let text = transDescrInput.text {
transactions.append(Transaction(discr: text, amount: Int(tempAmount)))
}
或使用nil-coalescing:
transactions.append(Transaction(discr: transDescrInput.text ?? "", amount: Int(tempAmount)))
根据经验,String(describing:)
几乎永远不会正确
解决方案(即使编译器将其建议为Fix-it),它也只是隐藏
实际问题。
答案 1 :(得分:-1)
发布这篇文章后,我意识到在将文本添加到我的数组之前必须解开文本。所以我改变了保存字符串的方式:
transactions.append(Transaction( discr: String(describing: transDescrInput.text!), amount: Int(tempAmount)))
我加了一个!在我将它保存到我的数组之前,在transDescrInput.text后面展开它。
答案 2 :(得分:-2)
我可以建议做这样的事吗?
let discrText = transactions[indexPath.row].discr.uppercased()
cell?.detailTextLabel?.text = "\(discrText!)"