基于枚举生成Shape的View

问题描述 投票:0回答:1

我想将我的视图枚举作为参数来生成相应的形状。

我尝试过这样的事情:

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 结构的包装?

swift swiftui view enums shapes
1个回答
0
投票

您可以将枚举值包装在

AnyView
中,然后您就可以像第一种方法一样使用它。

enum Shapes {
    case capsule
    case circle
    
    var val: AnyView { //<- here
        switch self {
        case .capsule:
            return AnyView(Capsule())
        case .circle:
            return AnyView(Circle())
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.