gpt4 book ai didi

ios - 类型 'any View' 不能符合泛型协议(protocol)上的 'View'

转载 作者:行者123 更新时间:2023-12-05 01:23:00 25 4
gpt4 key购买 nike

我正在使用一个协议(protocol)来定义对默认值的覆盖 View在我的应用程序中创建一些模板化 View 的协议(protocol)。他们将共享相同的 CalculationComponent查看大部分布局,然后将实现通过 @ViewBuilder 传递的不同按钮/控件它使用泛型。

我遇到的问题是,在定义我的协议(protocol)主体时,通用类型在 Type 'any View' cannot conform to 'View' 处抛出错误.我认为这与 <Content: View> 直接相关关于 CalculationComponent 的一部分

计算组件.swift

struct CalculationComponent<Content: View>: View {
@Binding var mainCalculation: String
@Binding var secondaryCalculation: String
@ViewBuilder var content: () -> Content

var body: some View {
// Template UI here

content()
}
}

CalculationView.swift

protocol CalculationView: View {
var mainCalculation: String { get set }
var secondaryCalculation: String { get set}
var body: CalculationComponent<View> { get } // Type 'any View' cannot conform to 'View'
}

CalculatorView.swift

struct CalculatorView: CalculationView {
@State internal var mainCalculation: String = ""
@State internal var secondaryCalculation: String = ""

var body: CalculationComponent {
CalculationComponent(
mainCalculation: $mainCalculation,
secondaryCalculation: $secondaryCalculation
) {
Text("Buttons and view content here")
}
}

}

最佳答案

如果我没理解错的话,你想要一个特殊版本的 View协议(protocol),其中 BodyCalculationComponent<some View> ,并且您不想在遵守协议(protocol)时明确地写出“some View ”以及其他一些要求。

您可以将关联类型添加到 CalculationView ,

protocol CalculationView: View {
associatedtype Content: View

var mainCalculation: String { get set }
var secondaryCalculation: String { get set}
var body: CalculationComponent<Content> { get } // Type 'any View' cannot conform to 'View'
}

然后说CalculationComponent<some View>当符合协议(protocol)时:

struct CropFactorCalculatorView: CalculationView {

@State internal var mainCalculation: String = ""
@State internal var secondaryCalculation: String = ""

var body: CalculationComponent<some View> {
CalculationComponent(
mainCalculation: $mainCalculation,
secondaryCalculation: $secondaryCalculation
) {
VStack {
Text("Some Text")
Text("Some Other Text")
}
}
}

}

关于ios - 类型 'any View' 不能符合泛型协议(protocol)上的 'View',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73013947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com