Может кто-нибудь объяснить, почему этот код не выполняется. Я пытаюсь изучить различные способы написания функций/структур и т. д., и меня озадачил тот, когда вы пишете функцию вне структуры и вызываете ее в структуре (например, так):
struct ContentView: View {
var body: some View {
print(referencePoint(refX: 10, typeX: 10))
}
}
func referencePoint(refX: Int, typeX: Int) -> Int {
return (refX * typeX)
}
Попробуйте let _ = print(referencePoint(refX: 10, typeX: 10))
@koen Возможно, это пропустит код через компилятор, но я думаю, что он ничего не напечатает.
каждая return
точка в body
должна давать View
, print
— это Void
, а не View
. Вы должны посмотреть учебные пособия по SwiftUI, которые Apple предоставляет
Похоже, вы решили написать приложение SwiftUI. SwiftUI — это DSL («язык предметной области»), и то, что вы можете делать в определенных контекстах, очень ограничено.
В частности, в body
представления (например, вашего ContentView), которое на самом деле является инициализатором построителя представлений, единственное, что вам разрешено делать, — это перечислять подпредставления представления, и вы должны описывать их, используя соглашения SwiftUI (т.е. экземпляр, за которым следуют любые вызовы метода модификатора, затем следующий экземпляр подпредставления, за которым следуют любые вызовы метода модификатора и т. д.).
Вы не можете сказать print
в таком контексте. Ошибка, которую вы получаете, говорит вам об этом чрезвычайно техническим и несколько непрозрачным способом.
Возможно, если вы изучаете Swift, вам следовало бы начать с так называемого приложения Storyboard. Даже там вы не можете просто сказать что-либо в любом контексте — в частности, вы не можете разместить исполняемый код на верхнем уровне — но вам, вероятно, будет проще поиграться с языком Swift.
Или вы можете поэкспериментировать на игровой площадке (хотя я этого не рекомендую).
Или, если ваш выбор проекта SwiftUI был преднамеренным, вам следует начать с великолепных руководств Apple по SwiftUI (но вы все равно должны изучить язык Swift полностью).
Спасибо, я учился пару дней, когда написал вопрос. Я на несколько дней продвинулся в курсе, поэтому я понимаю, что вы имеете в виду. Я немного удивлен, что мой пост получил какие-либо отрицательные голоса, хотя это был гениальный вопрос от человека, который только начал учиться (если бы я знал, что искать в Google в то время, я бы сделал). Тем не менее, спасибо за ваш ответ!
Связанный: stackoverflow.com/q/69433485/1187415 , stackoverflow.com/q/64678359/1187415 , stackoverflow.com/q/56517813/1187415