【问题标题】:SwiftUI Error Code "Generic parameter 'C0' could not be inferred"SwiftUI 错误代码“无法推断通用参数‘C0’”
【发布时间】:2024-01-24 11:36:01
【问题描述】:

我一直在编写一些 SUI 代码,但一直收到此错误:

Generic parameter 'C0' could not be inferred

这是它来自的 sn-p。我一直在网上无情地寻找,但找不到任何具体的东西。文件中的其他地方似乎没有任何语法错误,我已经多次尝试了经典的“断断续续”技巧。

import SwiftUI

struct ContentView: View {

    var eliminationModel = EliminationModel()
    @State private var code: String = "0000"
    let roboto = UIFont(name: "Roboto Mono", size: UIFont.systemFontSize)


    var body: some View {
        ZStack() {
            Image("background")
                .resizable()
                .edgesIgnoringSafeArea(/*@START_MENU_TOKEN@*/.all/*@END_MENU_TOKEN@*/)
            VStack() {
                HStack() {
                    VStack() {
                        Text("CODE:")
                            .font(Font.custom("Roboto Mono", size: 15))
                            .multilineTextAlignment(.center)
                        Text("6969")
                            .font(Font.custom("Roboto Mono", size: 10))
                            .padding(.top, 10.0)

                        Button(action: {
                            EliminationModel.printTest()
                        }) {
                            Text("Button")
                        }
                    }

                    .padding(.horizontal, CGFloat(50.0))

                    VStack() {

                        .textFieldStyle(RoundedBorderTextFieldStyle())
                        Text("INPUT: \(code)")
                            .font(Font.custom("Roboto Mono", size: CGFloat(20)))

                    }
                }
                .padding([.top, .leading, .trailing], 20.0)
                Spacer()
                HStack() {
                    VStack() {
                        Text("YOUR TARGET IS: ")
                            .font(Font.custom("Roboto Mono", size: 25))
                            .padding(.bottom, 11.0)
                        Text("JOHN APPLESEED")
                            .font(Font.custom("Roboto Mono", size: 40))
                            .fontWeight(.black)
                            .foregroundColor(Color.gray)
                            .multilineTextAlignment(.center)
                        Image("headshot")
                            .cornerRadius(10.0)
                    }
                }//hs
                Spacer()

                HStack() {
                    VStack(alignment: .center) {
                        Text("GRADE: ")
                            .font(Font.custom("Roboto Mono", size: 15))
                            .multilineTextAlignment(.center)
                        Text("FACULTY")
                            .font(Font.custom("Roboto Mono", size: 20))

                    }
                    VStack(alignment: .center) {
                        Text("DORM: ")
                            .font(Font.custom("Roboto Mono", size: 15))
                            .multilineTextAlignment(.center)
                        Text("DAY")
                            .font(Font.custom("Roboto Mono", size: CGFloat(20)!))

                    }
                } //hs
                Spacer()

            }

            .frame(minWidth: CGFloat(0)!, maxWidth: .infinity, minHeight: CGFloat(0)!, maxHeight: .infinity, alignment: Alignment.topLeading)
        } // zstack
    } // body view
} // struct

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

这是eliminationModel 文件:


import Foundation

struct EliminationModel {

func printTest() {
    print("hello world")
}

}

【问题讨论】:

  • SwiftUI 中的错误并不总是显示在它们真正的位置。请添加更多代码。例如:eliminationModel 是什么?你在body 中还有其他内容吗?
  • 我已将错误范围缩小到其他地方 - 摆脱隐藏正文其余部分的注释代码已修复导致错误返回,这次说参数是“S”。此外,它还抱怨.fonts 之一,说Cannot convert value of type 'Double' to expected argument type 'CGFloat?'。有任何想法吗?真的开始认为这整个 SwiftUI 事情不值得麻烦。无论如何,我都会用整个文件编辑主帖。
  • SwiftUI 是值得的,你只需要小心一点。 @Rob Napier 已经把你的例子分开了,我想我没有什么要补充的
  • 我的建议是开始使用 git。您始终可以返回到工作版本,然后添加功能以查看错误来自何处。

标签: swift swiftui


【解决方案1】:

此行不正确:

EliminationModel.printTest()

printTest 是一个实例方法:

EliminationModel().printTest()

CGFloat(0)! 引用不合法,因为CGFloat(0) 不是可选的。 (这段代码中也不需要CGFloat()。)

.frame(minWidth: 0)!, maxWidth: .infinity, minHeight: CGFloat(0)!, maxHeight: .infinity, alignment: Alignment.topLeading)

这一行应该是:

.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .topLeading)

(虽然我不确定您是否需要在此处将 minWidthminHeight 设置为 0。)


这个修饰符不附加任何东西;这似乎是一个错字:

.textFieldStyle(RoundedBorderTextFieldStyle())

还有一个不正确的CGFloat(Int)!

.font(Font.custom("Roboto Mono", size: CGFloat(20)!))

这应该是:

.font(Font.custom("Roboto Mono", size: 20))

我调试的方法是重复使用 Cmd-Shift-A>Extract Subview 来使 Views 更小。拥有一个庞大的视图对于编译器来说很难进行类型检查,而且它往往会将您指向错误的行。

将它们重新组合起来就是这样(但我建议将其重构为更小的视图。)

struct ContentView: View {

    var eliminationModel = EliminationModel()
    @State private var code: String = "0000"
    let roboto = UIFont(name: "Roboto Mono", size: UIFont.systemFontSize)


    var body: some View {
        ZStack() {
            Image("background")
                .resizable()
                .edgesIgnoringSafeArea(/*@START_MENU_TOKEN@*/.all/*@END_MENU_TOKEN@*/)
            VStack() {
                HStack() {
                    VStack() {
                        Text("CODE:")
                            .font(Font.custom("Roboto Mono", size: 15))
                            .multilineTextAlignment(.center)
                        Text("6969")
                            .font(Font.custom("Roboto Mono", size: 10))
                            .padding(.top, 10.0)

                        Button(action: {
                            EliminationModel().printTest()
                        }) {
                            Text("Button")
                        }
                    }

                    .padding(.horizontal, 50)

                    VStack() {

                        // FIXME: Unclear what this is supposed to be part of
//                        .textFieldStyle(RoundedBorderTextFieldStyle())
                        Text("INPUT: \(code)")
                            .font(Font.custom("Roboto Mono", size: 20))

                    }
                }
                .padding([.top, .leading, .trailing], 20.0)
                Spacer()
                HStack() {
                    VStack() {
                        Text("YOUR TARGET IS: ")
                            .font(Font.custom("Roboto Mono", size: 25))
                            .padding(.bottom, 11.0)
                        Text("JOHN APPLESEED")
                            .font(Font.custom("Roboto Mono", size: 40))
                            .fontWeight(.black)
                            .foregroundColor(Color.gray)
                            .multilineTextAlignment(.center)
                        Image("headshot")
                            .cornerRadius(10.0)
                    }
                }//hs
                Spacer()

                HStack() {
                    VStack(alignment: .center) {
                        Text("GRADE: ")
                            .font(Font.custom("Roboto Mono", size: 15))
                            .multilineTextAlignment(.center)
                        Text("FACULTY")
                            .font(Font.custom("Roboto Mono", size: 20))
                    }
                    VStack(alignment: .center) {
                        Text("DORM: ")
                            .font(Font.custom("Roboto Mono", size: 15))
                            .multilineTextAlignment(.center)
                        Text("DAY")
                            .font(Font.custom("Roboto Mono", size: 20))

                    }
                } //hs
                Spacer()

            }

            .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .topLeading)
        } // zstack
    } // body view
} // struct

【讨论】:

    最近更新 更多