Type '()' cannot conform to 'View'

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Type '()' cannot conform to 'View'

    Servus, ich bin neu im Forum und auch ziemlich neu in Swift.

    ich habe mir eine einfache Struct geschrieben, um mir die Arbeit für Sections geschrieben:

    Quellcode

    1. struct PropertiesSection : View {
    2. @EnvironmentObject var configuration : Configuration
    3. var header, footer : LocalizedStringKey?
    4. var content : AnyView
    5. var body : some View {
    6. Section {
    7. self.content
    8. } header: {
    9. if(header != nil) {
    10. Text(header!)
    11. .lineLimit(1)
    12. }
    13. } footer: {
    14. if(footer != nil && self.configuration.displayOptions.showDescriptions) {
    15. Text(footer!)
    16. }
    17. }
    18. }
    19. init<Content>(header : LocalizedStringKey? = nil, footer : LocalizedStringKey? = nil, content : () -> Content) where Content : View {
    20. self.header = header
    21. self.footer = footer
    22. self.content = AnyView(content())
    23. }
    24. }
    Alles anzeigen


    Sowie z.B. eine Struct für Toggle:

    Quellcode

    1. struct PropertyToggle : View {
    2. var image : String
    3. var label : LocalizedStringKey
    4. var property : Binding<Bool>
    5. var body : some View {
    6. Toggle(isOn: self.property) {
    7. HStack(spacing: .zero) {
    8. Components.propertyIcon(systemName: self.image)
    9. Components.propertyLabel(localizedStringKey: self.label)
    10. }
    11. }
    12. }
    13. }
    Alles anzeigen
    Und verwende das ganze so:

    Quellcode

    1. Components.PropertiesSection(header: "configuration.privacy.screen_protection.header", footer: "configuration.privacy.screen_protection.footer") {
    2. Components.PropertyToggle(
    3. image: "macwindow.on.rectangle",
    4. label: "configuration.privacy.screen_protection.app_switcher.label",
    5. property: self.$configuration.privacy.screenProtection.appSwitcher
    6. )
    7. // Components.PropertyToggle(
    8. // image: "camera",
    9. // label: "configuration.privacy.screen_protection.photo.label",
    10. // property: self.$configuration.privacy.screenProtection.photo
    11. // )
    12. // Components.PropertyToggle(
    13. // image: "video",
    14. // label: "configuration.privacy.screen_protection.video.label",
    15. // property: self.$configuration.privacy.screenProtection.video
    16. // )
    17. }
    Alles anzeigen
    Wenn ich nur einen PropertyToggle im Closure habe funktioniert alles, habe ich mehrere bekomme ich "Type '()' cannot conform to 'View'".

    Ich checks einfach nicht, wie ich den Code ändern muss, damit es mit mehreren funktioniert.
    Achso, ist SwiftUI mit UIKit, falls es relevant ist.
  • Perfekt, vielen lieben Dank!

    Ich musste nur den PropertyWrapper im init ergänzen:

    Quellcode

    1. init<Content>(header : LocalizedStringKey? = nil, footer : LocalizedStringKey? = nil, @ViewBuilder content : () -> Content) where Content : View {