- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第
SwiftUI中@ViewBuilder的相关知识点解密
@resultBuilder是在Swift5.4添加的,之前是叫@_functionBuilder,在这里我们可以简单了解一下它的作用。
一个类、结构体添加@resultBuilder注解时必须包含至少一个buildBlock方法,并且这个方法是static静态的。这个方法可以接收0个或多个参数,在函数内部确定了参数的组成形式。
比如下面这个例子:
@resultBuilderstructStringBuilder{
staticfuncbuildBlock(_string1:String,_string2:String,_string3:String)-String{
string1+-+string2+-+string3
functest(@StringBuilderstrings:()-String){
print(strings())
test{
StringBuilder是一个字符串构建者结构体,里面的buildBlock方法接收3个参数,并且在3个参数中间插入”-“作为函数的返回值。
test函数接收一个使用@StringBuilder修饰的名为strings的闭包作为参数,函数体是调用这个闭包并打印到控制台。
最后使用3个字符串作为参数调用test函数,执行这段代码后会得到”1-2-3”的输出结果
@ViewBuilder定义
先来看ViewBuilder的定义:
@resultBuilderstructViewBuilder
ViewBuilder本质上是一个结构体,并且被@resultBuilder注解,也就是说ViewBuilder是一个reultbuilder(结果建造者)类型了。
ViewBuilder结构体有11个名为buildBlock的函数,分别接收从0到10个View类型的参数,因此在SwiftUI中一个接收@ViewBuilder类型参数的视图容器最多能接收10个子视图,如果不能满足需求可以通过拆分来增加子视图的个数。
@ViewBuilder的用法
使用@resultBuilder注解ViewBuilder结构体后,就可以用@ViewBuilder修饰闭包,这个闭包可以接收多个指定类型的对象,而这些对象会按照buildBlock函数的实现进行组织。
Acustomparameterattributethatconstructsviewsfromclosures.
这是Apple的官方文档对ViewBuilder的定义,简单来说ViewBuilder就是一个包含多个视图的闭包。
在SwiftUI框架中,所有的容器视图都是使用@ViewBuilder来修饰最后一个参数,因此这些容器视图可以接受多个子视图作为参数。比如HStack/VStack/ScrollView等。
//HStack
publicstructHStackContent:ViewwhereContent:View{
@inlinablepublicinit(alignment:VerticalAlignment=.center,spacing:CGFloat=nil,@ViewBuildercontent:()-Content)
这是HStack的初始化方法,其中前面的几个参数都是可选项,它们不在本篇文章的讨论范围内。
它的最后一个参数content的类型是一个返回值为Content的闭包,单看()-Content是一个没有参数的闭包,但是前面使用了@ViewBuilder修饰,这就是一个可以接收多个视图的闭包了,最终看起来像是这样的:(view1:Content,view2:Content....)-Content。
下面我们通过自定义一个视图来看@ViewBuilder的用法。
实践
下面通过实现一个自定义的容器视图来展示@ViewBuilder的用法:
@ViewBuilder示例
自定义一个继承自View名为CustomContainerView的视图,它仅有一个接收@ViewBuilder类型参数的初始化方法,并使用常量content接收这个参数。
在body中构建当前视图:@ViewBuilder中可能包含多个子视图,因此使用VStack把这些子视图纵向排列,之
您可能关注的文档
- 福利院实践报告6篇.docx
- javascript中常用的字符串函数解读.docx
- 投诉查处制度(整理14篇).docx
- 里的乡愁作文8篇.docx
- 增资合同范本(3篇).docx
- 干部优秀事迹参考8篇.docx
- 车辆租赁合同范本简单(31篇).docx
- 必备中学生国旗下的演讲稿(30篇).docx
- 2025年小学校长迎新年活动致辞(5篇).docx
- 青春不息,奋斗不止演讲稿1000字(32篇).docx
- 2025年国家开放大学电大本科《金融法规》单项多项选择题库(含答案).pdf
- 2025至2030中国财务软件行业发展分析及细分市场及应用领域与趋势展望研究报告.docx
- 浙江省2025年11月稽阳联谊学校高三联考语文试卷及答案.docx
- U3 Section B Reading (1a-1c) 单元整体教学设计.docx
- 2025至2030中国车载装载机秤行业市场占有率及有效策略与实施路径评估报告.docx
- 戒指设计创意美术.pptx
- 2026年高考语文备考之教材古诗文知识要点梳理《静女》(含习题答案).docx
- 新建模具及设备生产线项目可行性研究报告模板-申批备案.doc
- Unit3 My SchoolPeriod 2(2a-2f) Listening and speaking逐字稿英语说课稿.docx
- 2022年中考物理真题及答案----电功电功率.pdf
有哪些信誉好的足球投注网站
文档评论(0)