Невозможно использовать пользовательский вид в SwiftUI - PullRequest
6 голосов
/ 06 июня 2019

Для моего приложения SwiftUI я создал простое представление Title с заданным размером шрифта и цветом текста. Title объявляется следующим образом:

struct Title: View {
    var string: String

    var body: some View {
        Text(string)
            .font(.system(size: 32))
            .color(Color.black)
    }
}

У меня есть следующие текстовые объекты в теле моего просмотра содержимого:

var body: some View {
    VStack(alignment: .leading) {
        Text("Welcome")
            .font(.largeTitle)
            .color(Color.black)
        Text("to SwiftUI")
            .font(.largeTitle)
            .color(Color.secondary)
    }
}

Итак, теперь я хочу заменить эти два Text на мои Title s:

var body: some View {
    VStack(alignment: .leading) {
        Title("Welcome")
        Title("to SwiftUI")
    }
}

После замены представлений я получаю некоторые, казалось бы, не связанные сообщения об ошибках из XCode, которые мешают компиляции приложения:

Статический член «ведущий» нельзя использовать в экземпляре типа «HorizontalAlignment»

'(LocalizedStringKey) -> Текст' не может быть преобразован в '(LocalizedStringKey, String ?, Bundle ?, StaticString?) -> Text'

'Шрифт' не конвертируется в 'Шрифт?'

... и больше. Возвращение к Text вместо Title "исправляет" проблемы.

Что интересно, у меня также есть пользовательское представление PrimaryButton, которое я смог добавить без проблем:

struct PrimaryButton: View {
    var title: String

    var body: some View {
        Button(action: { print("tapped") }) {
            Text(title)
                .font(Font.primaryButton)
                .offset(y: 1)
                .padding(.horizontal, 20)
                .padding(.vertical, 14)
        }
    }
}

... и затем использовать его:

PrimaryButton(title: "Let's go")

Вопрос

Это просто бета-версия или я что-то упустил?

Ответы [ 2 ]

6 голосов
/ 06 июня 2019

Вам необходимо добавить string: к вашему Title() инициализатору:

var body: some View {
    VStack(alignment: .leading) {
        Title(string: "Welcome")
        Title(string: "to SwiftUI")
    }
}

Ошибки компиляции в настоящее время вводят в заблуждение и не находятся рядом с реальной проблемой.

1 голос
/ 06 июня 2019

Вам не хватает параметра string: в инициализаторе. Пожалуйста, найдите обновленный код ниже:

var body: some View {
    VStack(alignment: .leading) {
        Title(string: "Welcome")
        Title(string: "to SwiftUI")
    }
}

FYI:
Я создал один пример приложения

// MARK - CustomView

struct ContentView : View {
    var body: some View {
        VStack{
            CustomView(aString: "First String")
            CustomView(aString: "Second String")
        }
    }
}

// MARK - CustomView

struct CustomView : View {
    var aString: String
    var body: some View {
        Text(aString)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...