【问题标题】:No exact matches in call to initializer of Text, how can I solve this issue in SwiftUI?调用 Text 的初始化程序没有完全匹配,如何在 SwiftUI 中解决这个问题?
【发布时间】:2021-04-14 15:18:14
【问题描述】:

我是 swift 新手,这可能是一个愚蠢的问题,但它让我困惑了很长时间。 这是我的代码,我通过模仿 WWDC 2020 的 swiftUI 简介中的三明治示例来编写此代码。

import SwiftUI

struct movieDetail: View {

    var idnum:Int

    var body: some View {

        Text(idnum)

    }
}

struct movieDetail_Previews: PreviewProvider {

    static var previews: some View {

        NavigationView {
            movieDetail(idnum:24428)
        }
       
    }
}

当它显示为编译错误时:

对初始化程序的调用没有完全匹配。

WWDC 2020 的示例如下

import SwiftUI

struct sandwichdetail: View {

    var sandwich:Sandwich
    @State private var zoomed = false

    var body: some View {

        VStack {
            Text(sandwich.name)
        }
        .navigationTitle(sandwich.name)
        .edgesIgnoringSafeArea(.bottom)
    }
}

struct sandwichdetail_Previews: PreviewProvider {

    static var previews: some View {
        NavigationView{
            sandwichdetail(sandwich: testData[1])
        }
        
    }
}

我不太明白这 2 段代码之间的区别以及为什么我的代码失败而三明治示例成功显示三明治的名称。

【问题讨论】:

    标签: swift swiftui


    【解决方案1】:

    Text 类型没有采用 Int 的初始化程序。试试这个:

    Text("\(idnum)")
    

    【讨论】:

    • 很好,可以了,非常感谢,我需要对这些细节更加谨慎
    【解决方案2】:

    另一种更 Swifty 的方式是使用 description,因为 Int 符合 CustomStringConvertible 协议。

    Text(idnum.description)
    

    【讨论】:

      【解决方案3】:

      如果这是您的常见用例,您可以使用 Swift 的字符串插值为 Text 创建自己的初始化程序。但是,这可能会降低调用站点的类型可见性。

      extension Text {
      
          init(_ int: Int) {
              self = Text("\(int)")
          }
      
      }
      

      【讨论】:

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