SwiftUI Необязательный верхний и нижний колонтитулы в разделе, непрозрачная ошибка типа возврата - PullRequest
0 голосов
/ 20 апреля 2020

я пытаюсь добиться того, чтобы в ListView были различные разделы, в которых может отображаться или не отображаться текст нижнего колонтитула или нижнего колонтитула. Так как Section строго типизирован, чтобы иметь нижний колонтитул или верхний колонтитул, или и то, и другое или ни одного, я должен go во всех случаях создать раздел, как в коде ниже. У меня проблема в том, что body выдает ошибку Function declares an opaque return type, but the return statement in its body do not have matching underlying types, поэтому, насколько я понимаю, хотелось бы иметь уникальный тип возвращаемого значения, который, как мне кажется, не тот, который мне нужен. Я новичок в SwiftUI, и я не уверен, как исправить проблему в этом случае. Также возвращая nil в последнем случае, жалуется, что 'nil' requires a contextual type. Спасибо!

struct CMGeneralSettingsSectionView: View {

        @Binding var section: CMGeneralSettingsSection

        var body: some View {
            if let headerTitle = section.headerTitle {
                if let footerTitle = section.footerTitle {
                    return Section(header: Text(headerTitle),
                                   footer: Text(footerTitle)) {
                                    return Text("")
                    }
                } else {
                    return Section(header: Text(headerTitle)) {
                        return Text("")
                    }
                }
            } else {
                if let footerTitle = section.footerTitle {
                    return Section(footer: Text(footerTitle)) {
                        return Text("")
                    }
                } else {
                    return nil
                }
            }
        }
    }

1 Ответ

0 голосов
/ 20 апреля 2020

Создайте body View Builder и верните EmptyView вместо nil, что недопустимо из-за необязательного some View возвращаемого типа.

Здесь исправлен вариант

struct CMGeneralSettingsSectionView: View {

        @Binding var section: CMGeneralSettingsSection

        @ViewBuilder
        var body: some View {
            if let headerTitle = section.headerTitle {
                if let footerTitle = section.footerTitle {
                    return Section(header: Text(headerTitle),
                                   footer: Text(footerTitle)) {
                                    return Text("")
                    }
                } else {
                    return Section(header: Text(headerTitle)) {
                        return Text("")
                    }
                }
            } else {
                if let footerTitle = section.footerTitle {
                    return Section(footer: Text(footerTitle)) {
                        return Text("")
                    }
                } else {
                    return EmptyView()
                }
            }
        }
    }
...