SwiftUI: GaugeStyle作为视图参数



我希望能够将GaugeGaugeStyle作为参数传递给我自己的SwiftUI视图,但是我似乎无法让这个与编译器一起工作。当我尝试下面的代码,我得到一个错误,Type 'any View' cannot conform to 'View'.

import SwiftUI
struct MyGauge: View {
let min = 0.0
let max = 10.0
let current = 5.0
let style: any GaugeStyle = .accessoryCircular

var body: some View {
Gauge(value: current, in: min...max) {
Text("Gauge")
} currentValueLabel: {
Text("(current)")
} minimumValueLabel: {
Text("(min)")
} maximumValueLabel: {
Text("(max)")
}
.gaugeStyle(style)
}
}

(代码简化为简洁)

允许GaugeStyle传递的正确方法是什么?

SwiftUI要求View的大部分区域都有具体的类型,尤其是包装器和视图修饰符。

any关键字是"existential">

@available(iOS 16.0, *)
struct MyGauge<G>: View where G : GaugeStyle{
let min = 0.0
let max = 10.0
let current = 5.0
let style: G
init(style: G = .accessoryCircular){
self.style = style
}
var body: some View {
Gauge(value: current, in: min...max) {
Text("Gauge")
} currentValueLabel: {
Text("(current)")
} minimumValueLabel: {
Text("(min)")
} maximumValueLabel: {
Text("(max)")
}
.gaugeStyle(style)
}
}
@available(iOS 16.0, *)
struct MyGauge_Previews: PreviewProvider {
static var previews: some View {
MyGauge()
MyGauge(style: .accessoryLinear)
}
}

最新更新