Generi c параметр 'Content' не может быть выведен SwiftUI - PullRequest
0 голосов
/ 19 июня 2020

У меня есть PersonView, как показано ниже

struct PersonView<Content>: View where Content: View {

    let text: Text
    let detailText: Text
    var content: (() -> Content)? = nil

    var body: some View {
        VStack(alignment: .leading, spacing: 10) {
            text
            detailText
            content?()
        }
    }
}

Также мой образец модели выглядит так:

struct Person {
    let name: String
    let age: Int
}

Чтобы упростить жизнь, я сделал расширение PersonView

extension PersonView {
    init<Content: View>(person: Person, content: (() -> Content)? = nil) {
        self.init(text: Text(person.name),
                  detailText: Text("\(person.age)"), content: content)
    }
}

, но здесь я получаю сообщение об ошибке типа «Невозможно преобразовать значение типа '(() -> Content)?' на ожидаемый тип аргумента 'Необязательный <(() -> _)>' "

Я не уверен, где ошибаюсь

1 Ответ

1 голос
/ 19 июня 2020

Вы не должны объявлять в инициализаторе дополнительный общий c параметр Content. Инициализатор не должен быть generi c, вместо этого просто используйте параметр Content generi c из PersonView:

extension PersonView {
    init(person: Person, content: (() -> Content)? = nil) {
        self.init(text: Text(person.name),
                  detailText: Text("\(person.age)"), content: content)
    }
}

Дополнительный Content, который вы объявили, является отличается от параметра generi c от Content в PersonView<Content>, поэтому компилятор говорит, что не может преобразовать типы.

...