面试题答案
一键面试-
定义自定义视图容器结构体:
- 创建一个遵循
View
协议的结构体。例如:
struct CustomViewContainer: View { }
- 创建一个遵循
-
定义子视图的存储:
- 可以使用
@ViewBuilder
属性包装的闭包来存储子视图。例如:
struct CustomViewContainer: View { @ViewBuilder var content: () -> some View init(@ViewBuilder content: @escaping () -> some View) { self.content = content } }
- 这里通过
@ViewBuilder
闭包来接收子视图内容,@escaping
表示闭包可以在初始化之后被调用。
- 可以使用
-
在
body
中呈现子视图:- 在
body
属性中调用并返回存储的子视图闭包。例如:
struct CustomViewContainer: View { @ViewBuilder var content: () -> some View init(@ViewBuilder content: @escaping () -> some View) { self.content = content } var body: some View { VStack { content() } } }
- 上述例子中,使用
VStack
作为容器来展示子视图,实际中可以根据需求使用不同的容器视图,如HStack
、ZStack
等。
- 在
-
使用自定义视图容器:
- 可以像这样使用定义好的
CustomViewContainer
:
struct ContentView: View { var body: some View { CustomViewContainer { Text("Sub - view 1") Text("Sub - view 2") } } }
- 在
CustomViewContainer
的闭包中添加需要的子视图,这些子视图会按照定义在CustomViewContainer
的body
中进行布局展示。
- 可以像这样使用定义好的