Невозможно использовать пользовательский вид в SwiftUI
Для моего приложения 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, которые мешают компиляции приложения:
Статический член "ведущий" нельзя использовать в экземпляре типа "Горизонтальное выравнивание"
'(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 ответа
Вам нужно добавить string:
на ваш Title()
инициализатор:
var body: some View {
VStack(alignment: .leading) {
Title(string: "Welcome")
Title(string: "to SwiftUI")
}
}
Ошибки компиляции в настоящее время вводят в заблуждение и не находятся рядом с реальной проблемой.
Вы скучаете по string:
param в инициализаторе. Пожалуйста, найдите обновленный код ниже:
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)
}
}
Сегодня, 01.10.2019, Swift подсказал заменить string:
с участием. verbatim:
.
Text(verbatim: "Pressure")
работает сегодняText(string: "Pressure")
вчера работал, но не сегодня.
hth