При создании, если я получаю это сообщение об ошибке.
If проверяет, является ли bool, называемый loggedIn, истинным или ложным.
struct ContentView: View{
@State var loggedIn = false
@State var user: BarberUser?
@State var username: String = ""
@State var password: String = ""
var body: some View{
Group {
if !loggedIn {
VStack{
.
.
.
}
}else{
.
.
.
}
}
}
}
Строка, которая выводит эту ошибку:
if !loggedIn {
что является причиной этой ошибки? И как я могу это исправить?
Если вам нужно больше информации о коде, спросите меня, и я предоставлю.
Всего 1 ответ
Первая проблема заключается в том, что SwiftUI часто показывает ошибки в неправильных местах. Вы можете попытаться извлечь ваши подпредставления, и это сделает ваш код более понятным и более удобным для поиска ошибок. Второе, что я вижу в вашем фрагменте кода: компилятор должен показать вам:
Функция объявляет непрозрачный возвращаемый тип, но не имеет в своем теле операторов возврата, из которых можно вывести базовый тип
если вы оставите только эти строки кода:
struct IfElseStatementsInBody: View {
@State var loggedIn = false
var body: some View {
if !loggedIn {
VStack {
Text("Need to login")
Button(action: { self.loggedIn = true }) {
Text("Log in!")
}
}
} else {
Text("Main view")
}
}
}
Обычный способ избежать этого - AnyView
ваши представления в AnyView
. Помните, что body
- это просто вычисляемая переменная, и он должен знать, что ему нужно return
. Другой способ - встроить if...else
в другое представление, например VStack
или ZStack
struct IfElseStatementsInBody: View {
@State var loggedIn = false
var body: some View {
if !loggedIn {
return AnyView(ExtractedView(loggedIn: $loggedIn)) // how to extract subview from here
} else {
return AnyView(Text("Main view"))
}
}
}
// ... to here
struct ExtractedView: View {
@Binding var loggedIn: Bool
var body: some View {
VStack {
Text("Need to login")
Button(action: { self.loggedIn = true }) {
Text("Log in!")
}
}
}
}
// MARK: embed if...else into ZStack. in this case you'll see changing of
// "loggedIn" variable in the canvas
struct EmbedIfElseStatementsInBody: View {
@State var loggedIn = false
var body: some View {
ZStack {
if !loggedIn {
ExtractedView(loggedIn: $loggedIn)// how to extract subview from here
} else {
Text("Main view")
}
}
}
}
PS надеюсь, это поможет. в другом случае ошибка в другом месте, но я не вижу ее сейчас из-за отсутствия кода.