在 uitableview 的自定义单元格中显示双精度值

showing a double value in a custom cell in uitableview

所以,完全披露:我是 Swift 的新手。

我正在开发一个应用程序,试图在自定义单元格中获取标签以显示 DOUBLE 值。我尝试执行 if let 条件绑定以将其从字符串转换为双精度类型,但我的源不是可选类型,我无法将其设为可选。所以我不确定该怎么做。

具体错误如下:
条件绑定的初始化器必须是 Optional 类型,而不是 'Double'
无法将类型 'Double?' 的值分配给类型 'String?'
在调用初始化程序时没有完全匹配

这是代码:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "DemoTableViewCell", for: indexPath) as! DemoTableViewCell
        
        cell.partNameLabel.text = parts[indexPath.row].partName
        
        // Convert string value to double
        if let value = parts[indexPath.row].partCost {
             cell.partCostLabel.text = Double(value)
        } else {
            cell.partCostLabel.text = 0.00
        }
        cell.purchaseDateLabel.text = parts[indexPath.row].purchaseDate

        return cell
    }

提前致谢!

从错误看来,parts[indexPath.row].partCost is already a Double -- 错误告诉你 if let 只适用于Optional 种类型。

因此,您可以将 if let / else 块替换为:

cell.partCostLabel.text = String(format: "%.2f", parts[indexPath.row].partCost)

cell.partCostLabel.text = 0.00 不起作用,因为 Text 需要一个 String - 使用上面的代码您将不再需要它,但是处理它的方法是 cell.partCostLabel.text = "0.00"

最后,Cannot assign value of type 'Double?' to type 'String?'——我不确定发生在哪一行,但如果它是 cell.purchaseDateLabel.text = parts[indexPath.row].purchaseDate 那么这意味着 purchaseDate 是一个 Double? 并且您正在尝试将其设置为需要 String 的值。您将需要考虑如何将 Double 转换为日期,但 这个 可能是您需要 if let:

if let purchaseDate = parts[indexPath.row].purchaseDate {
  cell.purchaseDateLabel.text = "\(purchaseDate)" //you probably want a different way to display this, though
}