#swift #swiftui
Вопрос:
Итак, у меня есть то TestView
, что принимает headerContent
и bodyContent
,
struct TestViewlt;Content: Viewgt;: View { var headerContent: (() -gt; Content)? = nil let bodyContent: () -gt; Content var body: some View { VStack { headerContent?() bodyContent() } } }
И я использую его как,
struct ContentView: View { var body: some View { TestView(headerContent: { Text("HeaderContent") }) { ScrollView { } } } }
Но я получаю следующую ошибку,
Cannot convert value of type 'ScrollViewlt;EmptyViewgt;' to closure result type 'Text'
Что я упускаю?
Комментарии:
1. Изменить
var headerContent: (() -gt; Content)?
наvar headerContent:() -gt; some View)?
2. @xTwisteDx я получаю
'some' types are only implemented for the declared type of properties and subscripts and the return type of functions
3. Это может быть просто
View
вместоsome View
того , чтобы не держать мою IDE перед банкоматом.4. Можете ли вы описать, что вы пытаетесь сделать? То, как вы это устроили, не имеет особого смысла, и я почти уверен, что с этим можно справиться лучше.
5. @xTwisteDx Ну, я пытаюсь передать два представления в структуру — одно будет отображаться в верхней части представления, а затем просто как тело. Также я получаю
Protocol 'View' can only be used as a generic constraint because it has Self or associated type requirements
эту ошибку кстати.
Ответ №1:
Вам нужно иметь два View
дженерика, так headerContent
как и bodyContent
не одно и то же.
Без этого вы говорите, что существует какой-то конкретный тип Content
, которому соответствует View
. Однако оба Text
и ScrollView
являются разными типами, а не одним и тем же.
Код:
struct TestViewlt;HeaderContent: View, BodyContent: Viewgt;: View { var headerContent: (() -gt; HeaderContent)? = nil let bodyContent: () -gt; BodyContent var body: some View { VStack { headerContent?() bodyContent() } } }
Комментарии:
1. В этом есть смысл. Большое спасибо @George
2. @swiftPunk Тебе не обязательно преследовать меня, лол. Я не смотрел на твой ответ. Но да, ваш ответ правильный.