- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第
Swift中的HTTP请求体RequestBodies使用示例详解
目录正文通用化body空请求体EmptyBody数据体DataBodyJSON体JSONBody表单FormBody其他BodyOtherBodies
正文
在进行HTTPRequest请求发送前,我们稍稍改进一下我们的结构体,最后,我们将会以下面的信息输出:
publicstructHTTPRequest{
privatevarurlComponents=URLComponents()
publicvarmethod:HTTPMethod=.get
publicvarheaders:[String:String]=[:]
publicvarbody:Data
在本节中,我们将着重讨论一下body属性,并对其进行改造。
通用化body
在HTTP简介那一节,我们了解到,一个请求体是原始二进制数据,但是,在与WebAPI通信时,这些数据有多种标准格式,例如JSON和表单提交。
我们可以将其概括为一种给我们数据的东西的形式,而不是要求此代码的客户手动构造其提交数据的二进制表示。
由于我们不打算对用于构造数据的算法施加任何限制,因此通过协议而不是具体类型来定义此功能是有意义的:
publicprotocolHTTPBody{}
接下来,我们需要一种方法从其中一个值中获取Data,并在出现问题时选择性地报告错误:
publicprotocolHTTPBody{
funcencode()throws-Data
我们可以在这一点上停下来,但还有另外两条信息值得拥有:
publicprotocolHTTPBody{
varisEmpty:Bool{get}
varadditionalHeaders:[String:String]{get}
funcencode()throws-Data
如果我们能快速知道一个body是空的,那么我们就可以省去尝试检索任何编码数据和处理错误或空数据值的麻烦。
此外,某些类型的正文与请求中的header结合使用。例如,当我们将值编码为JSON时,我们希望有一种方法可以自动指定Content-Type:application/json的header,而无需在请求中手动指定它。为此,我们将允许这些类型声明额外的header,这些标头将作为最终请求的一部分结束。为了进一步简化采用,我们可以为这些提供默认实现:
extensionHTTPBody{
publicvarisEmpty:Bool{returnfalse}
publicvaradditionalHeaders:[String:String]{return[:]}
最后,我们可以将我们的类型更新到这个新的协议中
publicstructHTTPRequest{
privatevarurlComponents=URLComponents()
publicvarmethod:HTTPMethod=.get
publicvarheaders:[String:String]=[:]
publicvarbody:HTTPBody
空请求体EmptyBody
最简单的HTTPBody是无体。有了这个协议,定义一个空请求体也是很方便的。
publicstructEmptyBody:HTTPBody{
publicletisEmpty=true
publicinit(){}
publicfuncencode()throws-Data{Data()}
我们甚至可以将其设置为默认的主体值,从而完全消除对该属性的可选性的需要:
publicstructHTTPRequest{
privatevarurlComponents=URLComponents()
publicvarmethod:HTTPMethod=.get
publicvarheaders:[String:String]=[:]
publicvarbody:HTTPBody=EmptyBody()
数据体DataBody
下一个明显要实现的主体类型是返回给定的任何Dat
您可能关注的文档
- 行政后勒工作总结6篇.docx
- 出纳个人的工作总结范文(3篇).docx
- 感恩节主题优秀的演讲稿(30篇).docx
- 项目部工程项目管理制度(30篇).docx
- 雷电灾害应急预案(通用10篇).docx
- 浅谈springBean的作用域.docx
- 利用python绘制二三维曲面和矢量流线图的代码示例.docx
- 财务2025个人工作计划(31篇).docx
- 影视剧演职人员聘用合同(3篇).docx
- 清廉作风主题演讲稿(8篇).docx
- 外研版高中英语选择性必修第一册全册教学课件.pptx
- 2025年新冀教版英语8年级上册全册教学课件.pptx
- 2025年新人教版语文8年级上册全册同步教学课件(考点精讲版).pptx
- 2025年新人教版语文8年级上册全册同步课件(考点精讲版).pptx
- 2025年新人教版语文8年级上册整册同步课件(考点精讲版).pptx
- 2025年新人教版语文8年级上册全册教学课件(考点精讲版).pptx
- 2025年秋季人教版英语八年级上册同步教学课件.pptx
- 2024年秋季学期新沪科版8年级上册物理全册教学课件.pptx
- 2024年秋季学期新沪科版8年级上册物理全册课件.pptx
- 2024年秋季学期新沪科版八年级上册物理全册教学课件.pptx
文档评论(0)