【问题标题】:Error "No exact matches in call to initializer"错误“调用初始化程序没有完全匹配”
【发布时间】:2022-08-02 23:14:12
【问题描述】:

我是一名初学者开发人员,我想在我的视图中添加我的价格变量,它是标题变量旁边的双倍。当我尝试 Text(price) is 给我错误\“在调用初始化程序时没有完全匹配\”。这是因为我不能在文本中使用双精度吗?

import SwiftUI

struct TaskRow: View {
    var task: String
    var price: Double
    var completed: Bool
    
    var body: some View {
        HStack(spacing: 20) {
            Image(systemName: completed ?
                  \"checkmark.circle\" : \"circle\")
            Text(price)           \"No exact matches in call to initializer\"
            Text(task)
        }
    }
}

struct TaskRow_Previews: PreviewProvider {
    static var previews: some View {
        TaskRow(task: \"Do laundry\", price: 1.00, completed: true)
    }
}

问题截图:

  • Text 采用 String。您正在尝试传递Double。您可以通过执行以下操作将其插入StringText(\"\\(price)\")

标签: swift swiftui


【解决方案1】:

问题是Text 接受一个字符串,因此您只需先将 Double 转换为字符串。如果您想计划语言环境或不同的货币,您可以这样做

import SwiftUI

struct TaskRow: View {
    var task: String
    var price: Double
    var completed: Bool

    var priceString: String {
        return price.toLocalCurrency()
    }
    
    var body: some View {
        HStack(spacing: 20) {
            Image(systemName: completed ?
                  "checkmark.circle" : "circle")
            Text(priceString)
            Text(task)
        }
    }
}

struct TaskRow_Previews: PreviewProvider {
    static var previews: some View {
        TaskRow(task: "Do laundry", price: 1.00, completed: true)
    }
}

// This could be in another file
// Extension to convert doubles to currency strings consistently
extension Double {
    func toLocalCurrency() -> String {
        let formatter = NumberFormatter()
        var priceString = self.description
        formatter.locale = Locale.current
        formatter.numberStyle = .currency
        if let formattedTipAmount = formatter.string(from: NSNumber(value: self)) {
            priceString = formattedTipAmount
        }
        return priceString
    }
}

如果您现在不想打扰 Locale,您也可以使用其中任何一种:

  • Text("\(price)") // 1.00
  • Text(price.description) // 1.00
  • Text("$\(price)") // $1.00

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-14
    • 2022-11-19
    • 2020-08-22
    • 1970-01-01
    • 2020-10-29
    • 2022-01-15
    • 1970-01-01
    • 2021-09-19
    相关资源
    最近更新 更多