当前位置: 首页 > 知识库问答 >
问题:

SwiftUI错误:“视图”。类型“不可转换为”(字符串、字符串、字符串、雕文)->“视图”

路和悌
2023-03-14

第一个 SwiftUI 项目:)我有一个来自顶级视图中的列表中的 NavLink,该列表调用详细信息视图。它一直在工作,直到我需要将结构的@State变量添加到详细信息视图中,现在调用参数列表与编译器期望的不匹配:

    ZStack {
        VStack {
            NavigationView {
                    List(gList) { gard in
                        NavigationLink(destination:
                            SelectGlyph(catList: gard.category,
                                        firstGlyph: gard.ex1,
                                        descr: gard.title,
                                        selectedGlyph: Glyph() )
                        {

并且细节视图开始:

struct SelectGlyph: View {
    var catList: String
    var firstGlyph: String
    var descr: String
    @State var selectedGlyph:Glyph = Glyph()

    var body: some View {
        ZStack{
            VStack() {
                VStack {
                    VStack {
                        VStack {

并且字形结构被定义为:

struct Glyph: Codable, Identifiable, Equatable {
    var id:String {
        return Gardiner
    }
    var Hieroglyph: String
    var Gardiner: String
    let Unicode: String
    let Description: String
    let Transliteration: String
    let Phonetic: String
    let Notes: String

    init() {
        self.Hieroglyph = ""
        self.Gardiner = ""
        self.Unicode = ""
        self.Description = ""
        self.Transliteration = ""
        self.Phonetic = ""
        self.Notes = ""
    }

    init(Hiero:String, Gard:String, Uni:String, Desc:String, trans:String, phon:String, notes:String) {
        self.Hieroglyph = Hiero
        self.Gardiner = Gard
        self.Unicode = Uni
        self.Description = Desc
        self.Transliteration = trans
        self.Phonetic = phon
        self.Notes = notes
    }
}

错误出现在顶级ContentView导航链接目标中:

'SelectGlyph.Type' is not convertible to '(String, String, String, Glyph) -> SelectGlyph'

我在调用列表中尝试了几种变化,并试图删除SelectGlyph中的@State包装,但都没有效果。任何帮助都将不胜感激!如果我知道如何在一个视图中指定一个局部变量,而不把它作为调用中的一个必需参数,那就好了(我确信我在这里漏掉了什么!)

作为对Asperi的响应,我尝试了SelectGlyph视图的显式初始化程序,但仍然在同一个地方出现了相同的错误:

struct ContentView: View {
    var gList: [GardinerList] = gardinerTest
    var body: some View {
        UINavigationBar.appearance().backgroundColor = .yellow
            return
        ZStack {
            VStack {
                NavigationView {
                        List(gList) { gard in
                            NavigationLink(destination:
                                SelectGlyph(catList: gard.category,  <- Error Here
                                            firstGlyph: gard.ex1,
                                            descr: gard.title,
                                            selectedGlyph: Glyph() )
                            {
                            Text(gard.category)
                                .fontWeight(.bold)
                                .foregroundColor(Color.green)

SelectGlyph视图现在修改为具有显式的init()。我尝试将init()中的selectedGlyph指定为_selectedGlyph和自_selectedGlyph

struct SelectGlyph: View {
    var catList: String
    var firstGlyph: String
    var descr: String
    @State private var selectedGlyph:Glyph = Glyph()

    init(catList: String, firstGlyph: String, descr: String, selectedGlyph:Glyph) {
        self.catList = catList
        self.firstGlyph = firstGlyph
        self.descr = descr
        self._selectedGlyph = State<Glyph>(initialValue: selectedGlyph)
    }

    var body: some View {
        ZStack{
            VStack() {

共有1个答案

陶鸿畴
2023-03-14

它就在这里

                NavigationLink(destination:
                    SelectGlyph(catList: gard.category,
                                firstGlyph: gard.ex1,
                                descr: gard.title,
                                selectedGlyph: Glyph() )

这里需要显式的初始值设定项,如

struct SelectGlyph: View {
    var catList: String
    var firstGlyph: String
    var descr: String

    @State private var selectedGlyph:Glyph // << always keep @State private !!

    init(catList: String, firstGlyph: String, descr: String, selectedGlyph:Glyph) {
        self.catList = catList
        self.firstGlyph = firstGlyph
        self.descr = descr
        _selectedGlyph = State<Glyph>(initialValue: selectedGlyph)
    }

更新:再来一个。如果不是复制粘贴错误,则您错过了导航链接中的“')

NavigationLink(destination:
    SelectGlyph(catList: gard.category,
                firstGlyph: gard.ex1,
                descr: gard.title,
                selectedGlyph: Glyph() )) // << here !!
{
 类似资料:
  • 问题内容: 如何将经典字符串转换为f字符串? 输出: 所需的输出: 问题答案: f字符串是 语法 ,而不是对象类型。您不能将任意字符串转换为该语法,该语法会创建一个字符串对象,而不是相反。 我假设您想用作模板,因此只需在对象上使用方法: 如果要提供可配置的模板服务,请创建一个包含所有可以插值的字段的名称空间字典,并与调用语法一起使用以应用名称空间: 然后,用户可以在字段中的名称空间中使用任何键(或

  • 我遇到了这样一个java字符串,其中以下内容是错误的: 我想这是因为字符串构造函数默认将主体字节[]的编码视为UTF-8,我不是100%确定。我如何能够将此字符串存储在字节[]中,并能够稍后将其转换回来?我想我需要能够确定字节[]的编码方式。我该怎么做呢? 一些上下文:我需要字节[],以便压缩数据,将其存储在数据库中,然后解压缩并将未压缩的字节[]转换回原始字符串。这个字符串最初来自某个下载了网页

  • 问题内容: 是否可以将模板字符串创建为常规字符串 然后将其转换为模板字符串 没有,以及其他动态代码生成方式? 问题答案: 由于您的模板字符串必须动态地(在运行时)引用该变量,因此答案是: 否,没有动态代码生成是不可能的。 但这很简单:

  • 问题 怎样将C中的字符串转换为Python字节或一个字符串对象? 解决方案 C字符串使用一对 char * 和 int 来表示, 你需要决定字符串到底是用一个原始字节字符串还是一个Unicode字符串来表示。 字节对象可以像下面这样使用 Py_BuildValue() 来构建: char *s; /* Pointer to C string data */ int len; /*

  • 如何将字符串(字节字符串)转换为字节(字节字符串),而不必手动复制和粘贴字符串并在其前面放置b?

  • 问题内容: Oracle Java Community网站上的一篇文章提供了以下方法作为示例(对于JPA Converter,但这并不相关): 将String y强制转换为String val有什么用?有正当的理由吗? 原始文章:JPA的新增功能 问题答案: 这样的转换是完全没有必要的。我可以想象那是以前 但是后来参数类型更改为,而作者只是忘了删除强制类型转换。