2 votes

Création conditionnelle de formes - SwiftUI

J'essaie d'écrire une fonction qui crée une forme en fonction d'une condition spécifiée mais je reçois une erreur de compilation.

func createShape() -> some Shape {
    switch self.card.shape {
    case .oval:
        return Capsule()
    case .rectangle:
        return Rectangle()
    case .circe:
        return Circle()
    default:
        return Circle()
    }
}

L'erreur que je reçois :

La fonction déclare un type de retour opaque, mais les déclarations de retour dans son corps n'ont pas de types sous-jacents correspondants.

1voto

Luda Points 3393

Avec l'aide de ce poste ce qui m'a aidé c'est :

Créer un AnyShape :

#if canImport(SwiftUI)

import SwiftUI

@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *)
public struct AnyShape: Shape {
    public var make: (CGRect, inout Path) -> ()

    public init(_ make: @escaping (CGRect, inout Path) -> ()) {
        self.make = make
    }

    public init<S: Shape>(_ shape: S) {
        self.make = { rect, path in
            path = shape.path(in: rect)
        }
    }

    public func path(in rect: CGRect) -> Path {
        return Path { [make] in make(rect, &$0) }
    }
}

#endif

Ensuite :

func createShape() -> AnyShape {
    switch self.card.shape {
    case .oval:
        return AnyShape(Capsule())
    case .rectangle:
        return AnyShape(Rectangle())
    case .circe:
        return AnyShape(Circle())
    }
}

0voto

sheldor Points 81

D'après le commentaire et le lien d'Asperi :

Changer pour :

@ViewBuilder
func createShape() -> some View {
    switch self.card.shape {
    case .oval:
        Capsule()
    case .rectangle:
        Rectangle()
    case .circle:
        Circle()
    default:
        Circle()
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X