Передайте имя изображения в пользовательский подкласс Image в SwiftUI - PullRequest
1 голос
/ 21 февраля 2020

Я пытаюсь выполнить sh то, что выглядит довольно просто: у меня есть собственный подкласс Image в SwiftUI, который я использую для удобства, и я хотел бы использовать его в своем приложении. Моя конечная цель - использовать OnboardingThumbnailImage в других представлениях и просто передать имя изображения конструктору.

import SwiftUI

struct OnboardingThumbnailImage: View {
    var imageName: String

    var body: some View {
        Image(imageName)
            .resizable()
            .scaledToFit()
            .frame(width: 50, height: 50)
            .foregroundColor(Colors.tintColor)
    }
}

struct OnboardingThumbnailImage_Previews: PreviewProvider {
    static var previews: some View {
        OnboardingThumbnailImage(imageName: "?????")
    }
}

Как я могу выполнить sh это? Компилятор требует, чтобы я указал значение внутри OnboardingThumbnailImage_Previews, поэтому я понятия не имею. Я изучил привязки, но мне не нужна «улица с двусторонним движением» между видами, поэтому я не уверен.

Могу ли я вместо этого просто оставить Image() без аргументов внутри, в Чтобы наследовать конструктор Image по умолчанию? Если я оставляю Image(), я получаю ошибку: Невозможно вызвать инициализатор для типа 'Image' без аргументов.

Ответы [ 2 ]

2 голосов
/ 21 февраля 2020

Это способ SwiftUI спросить вас

Какое изображение вы хотите показать при просмотре этого View?

Вы можете только предварительный просмотр SwiftUI просматривает на macOS Catalina, поэтому, если вы не используете Catalina (как и я), то эта функция вам не очень нужна.

Вы должны поместить изображение, которое хотите видеть в превью в бите ????. Если вы не используете Catalina или просто не хотите просматривать ее, вы можете просто удалить всю структуру OnboardingThumbnailImage_Previews.

Также обратите внимание, что вы не можете «создать подкласс» другого представления в SwiftUI. Все, что вы можете сделать, это композиция , что вы и сделали здесь. Дизайн SwiftUI предпочитает композицию над наследованием . Вы можете найти объяснения этой концепции на этих страницах: 1 , 2 .

0 голосов
/ 21 февраля 2020

В вашем структурном представлении переменная imageName нуждается в значении для инициализации. как это должно быть строка, потому что вы определяете строковую переменную и используете ее в своем изображении. Чтобы игнорировать ошибку, вы можете установить пустое значение в вашей переменной, чтобы игнорировать требование инициализации в конструкции представления

var imageName: String = ""
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...