我想将我的视图枚举作为参数来生成相应的形状。
我尝试过这样的事情:
import SwiftUI
struct NotWorkingView: View {
var body: some View {
Card(shape: .capsule)
Card(shape: .circle)
}
}
struct Card: View {
let shape: Shapes
var body: some View {
shape.val
}
}
enum Shapes {
case capsule
case circle
var val: any Shape {
switch self {
case .capsule:
return Capsule()
case .circle:
return Circle()
}
}
}
但是 Xcode“无法生成诊断”
我可以这样做:
import SwiftUI
struct WorkingView: View {
var body: some View {
Card(shape: Capsule())
Card(shape: Circle())
}
}
struct Card<Content: Shape>: View {
let shape: Content
var body: some View {
shape
}
}
但我希望能够迭代所有有效的形状。
是否可以在不将 Card 作为模板的情况下实现这一目标?或者也许我需要 Card 结构的包装?
您可以将枚举值包装在
AnyView
中,然后您就可以像第一种方法一样使用它。
enum Shapes {
case capsule
case circle
var val: AnyView { //<- here
switch self {
case .capsule:
return AnyView(Capsule())
case .circle:
return AnyView(Circle())
}
}
}