




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章创建机器人聊天室目录表视图1234图灵机器人API网络访问URLSession基于表格的聊天界面PART01表视图表视图UITableView继承自UIScrollView。一个表视图可以由多个分段(section)组成,每个分段可以有一个头和尾。很多情况下表视图只有一个分段,而且不显示头尾。表视图本身也可以有一个头(显示在第一个分段之前)和一个尾(显示在最后一个分段之后)。一个表视图的整体元素结构示意如图表视图UITableView有以下两种样式(UITableViewStyle):Plain(普通样式)和Grouped(分组样式)。表视图分割线(Separator),有以下三种样式(UITableViewCellSeparatorStyle):None(无分割线)、SingleLine(单线条)和SingleLineEtched(带浮雕效果的线条)表视图表视图单元格(Cell),有以下四种显示样式(UITableViewCellStyle):Default(左侧显示textLabel,不显示detailTextLabel,最左边可选显示imageView)Value1(左侧显示textLabel,右侧显示detailTextLabel,最左边可选显示imageView)Value2(左侧依次显示textLabel、detailTextLabel,最左边可选显示imageView)Subtitle(左侧上方显示textLabel,左侧下方显示detailTextLabel,最左边可选显示imageView)表视图Cell有以下四种选中样式(UITableViewCellSelectionStyle):None、Blue、Gray和Default。附属图形(Accessory),有以下五种样式(UITableViewCellAccessoryType):None(无附属图形)DisclosureIndicator(小箭头)DetailDisclosureButton(详细信息按钮+指向右侧的箭头)Checkmark(勾号)DetailButton(详细信息按钮)表视图iOS遵循MVC设计模式,很多操作通过代理和外界沟通,UITableView同理实现了以下两种协议:UITableViewDelegate和UITableViewDataSource。其中UITableViewDataSource至少要实现以下两个方法:numberOfRowsInSection(确定表格每个分区拥有多少行)和cellForRowAtIndexPath(提供一个表格显示用的Cell);而UITableViewDelegate没有必须实现的方法。表视图的最简单使用最简单的表视图主要包括:一个存放表格内容的数组dataArray;一个UITableView变量myTab了View;在ViewController类声明中继承协议UITableViewDataSource和UITableViewDelegate,并设置委托为self;数据委托方法functableView(_tableView:UITableView,numberOfRowsInSectionsection:Int)->Int和functableView(_tableView:UITableView,cellForRowAtindexPath:IndexPath)->UITableViewCell等。表视图的最简单使用主要步骤:建立一个SingleView工程,然后在ViewController.swift中输入代码。程序运行的效果如图表视图的最简单使用采用苹果直接提供的UITableViewController来建立一个简单的表格,这个控制器实现了UITableView数据源和代理协议,内部定义了一个tableView属性供外部访问,同时自动铺满整个屏幕、自动伸缩等。1.建立一个工程TableViewSimple2.选择Main.storyboard,拖放TableViewController组件表视图的最简单使用3.将TableViewController设置为启动项或者,选择TableViewController,找到属性查看器,选中“IsInitialViewController”表视图的最简单使用4.在工程中新建一个文件5.为新文件选择模版表视图的最简单使用6.为新文件设置选项7.选择默认位置,退出对话框表视图的最简单使用8.选择Main.storyboard,关联类和界面组件9.选择TableViewCell,设置其标示为Cell表视图的最简单使用10.修改MyTableViewController.swift代码,运行代码详见书本用户可以自行对比一下以上两种方法的代码。另外,如果要使用静态表格,那就只能采用TableViewController。表视图的一般使用我们准备采用表格来显示学生信息,主要包括学生姓名name、特点character、头像照片headpic等。采用了Dictionary来保存一个学生数据,多个学生数据保存到一个数组。代码详见书本程序运行的效果如图自定义表视图的使用自定义表视图实际上就是指对单元格自定义,这样就可以出现和传统不一样的表格样式为了自定义单元格,我们需要新建一个类MyCell,继承自UITableViewCell,重载其初始化函数overrideinit(style:UITableViewCellStyle,reuseIdentifier:String?),在该初始化函数中,我们重新设计了不同位置的两个UILabel和一个UIImageView;重载了frame变量,使得单元格宽度始终为屏幕宽。代码详见书本PART02图灵机器人API图灵机器人北京光年无限科技有限公司主要从事机器人人工智能及机器人操作系统的研发及商业化应用,在语义理解、机器视觉、多模态人机交互、深度学习、机器人等领域具备领先优势。2014年11月发布图灵机器人(网址:),是中文语境下智能度最高的机器人大脑,已为超过23万家企业和开发者提供服务,广泛应用于机器人、智能家居、智能车载、智能客服、可穿戴设备等众多场景。数据交换格式JSONJSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。它基于ECMAScript(w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。JSON拥有简洁和清晰的层次结构,易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率,使得JSON成为理想的数据交换语言。数据交换格式JSONJSON数据分为三种形式,对象,数组,值。对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’对”之间使用“,”(逗号)分隔数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔数据交换格式JSON值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、null、对象(object)或者数组(array)。这些结构可以嵌套。下面是一个简单的例子:{"Name":"ChenZhifeng","Profession":"Teacher","Age":46,"Email":163.com","Friends":["ZhangSan","LiSi"]}这个数据示例,表示了这样一个结构,首先我们的数据被一对大括号包围,那么我们的数据就是对象类型,然后它里面有五个属性,Name、Profession、Age、Email和Friends。其中三个属性Name、Profession和Email字符串类型;Age属性代表年龄,所以它的值一个Number类型的46。注意:字符串类型和数字类型的区别,字符串类型的值用一对双引号括了起来,而数值类型不需要双引号。最后,Friends属性的值是一个数组,用一对中括号包围起来,而数组中的元素,仍然是字符串类型。数据交换格式JSON某高校组建了一个iOS开发的兴趣小组,这个小组的名称为iOS-Orange-Team,指导教师为ChenZhifeng,小组的学生有3个,分别为Zhangbo、ChangWenxiang和Huyinting。{"TeamName":"iOS-Orange-Team","Teacher":"ChenZhifeng","Students":[{"Name":"ZhangBo","Hometown":"Xuzhou"},{"Name":"ChangWenxiang","Hometown":"Yancheng"},{"Name":"HuYinting","Hometown":"Suzhou"}]}数据交换格式JSON通过在浏览器中访问网址来获得英国伦敦的天气预报等信息:/data/2.5/weather?q=London,uk&appid=b1b15e88fa797225412429c1c50c122a1,得到类似以下JSON数据:{ "coord":{"lon":-0.13,"lat":51.51}, "weather":[{"id":300,"main":"Drizzle","description":"lightintensitydrizzle","icon":"09d"}], "base":"stations", "main":{ "temp":280.32, "pressure":1012, "humidity":81, "temp_min":279.15, "temp_max":281.15 }, "visibility":10000, "wind":{"speed":4.1,"deg":80}, "clouds":{"all":90}, "dt":1485789600, "sys":{ "type":1, "id":5091, "message":0.0103, "country":"GB", "sunrise":1485762037, "sunset":1485794875 }, "id":2643743, "name":"London", "cod":200}数据测试与解析1.图灵机器人JSON数据测试用户可以访问网址:,然后注册一个账号,可以免费访问5000次/天,其中最重要的是记住APIKey数据测试与解析在通过iOS编程访问图灵机器人数据之前,我们可以通过浏览器测试一下网络是否通畅。在浏览器中输入以下网址,其中Key=XXXXXXXXX需要修改为你刚才注册成功后获得的APIKey,就可以获得如图6-18所示的JSON数据:/openapi/api?key=XXXXXXXXX&info=你是谁?&type=JSON数据测试与解析2.Swift中的JSONSerialization用户与Web应用通信,一般可以从服务端返回JSON格式的消息。因此在Swift的Foundation框架中,提供了JSONSerialization类可以将JSON格式的数据转换为Swift的Dictionary、Array、String、Number和Bool等类型。数据测试与解析示例程序6-1首先建立一个字典Dictionary,包括三个数据项,其中Students这个数据项是一个数组Array(包括三个记录,每个记录也是一个字典Dictionary)然后判断这个字典中的数据是否符合转换为JSON格式的合法性,如果数据格式正确,则调用JSONSerialization.data转换为data最后JSONSerialization.jsonObject将data中JSON格式重新解析为字典。代码详见书本数据测试与解析示例程序6-1运行结果PART03网络访问URLSession网络访问URLSessionNSURLSession是苹果提供的原生网络访问类,提供了配置每个会话的缓存、协议、cookie和证书政策(credentialpolicies),甚至跨应用程序共享它们的能力。这使得框架的网络基础架构和部分应用程序独立工作,而不会互相干扰。每一个NSURLSession对象都是根据一个NSURLSessionConfiguration初始化的,该NSURLSessionConfiguration指定策略,以及一系列为了提高移动设备性能而专门添加的新选项。NSURLSession的另一重要组成部分是会话任务,它负责处理数据的加载,以及客户端与服务器之间的文件和数据的上传下载服务。注意:由于NSURLSession采用的是“异步阻塞”模型,所以在实现代理方法更新UI时需要将线程切回主线程。NSURLSession的用法先根据会话对象创建一个请求Task然后执行该Task即可。NSURLSessionTask本身是一个抽象类,在使用的时候,通常是根据具体的需求使用它的几个子类NSURLSession的用法NSURLSession使用的第1步需要配置会话模式,其支持以下三种会话模式:默认会话模式(default):默认模式,基于磁盘缓存的持久化策略,使用用户keychain中保存的证书进行认证授权。瞬时会话模式(ephemeral):不储存任何数据在磁盘中,所有数据都保存在RAM中,当会话结束后,缓存数据将被清空。后台会话模式(background):该模式类似于默认模式,只是将上传和下载移至后台处理,需要一个提供一个String用于标识后台会话。NSURLSession的用法第2步,在配置完会话模式后,就可以获取NSURLSession对象了。获取对象的方法有以下几种:sharedSession获取的会话使用的是默认配置(default),全局共享的Cookies,Cache和证书。使用构造器构造一个指定配置的会话对象。使用构造器构造一个指定配置对象,并指定代理及代理列队。NSURLSession的用法第3步,在获取完会话对象后,就需要设定会话任务了。在这里是通过建立一个会话任务对象来实现布置任务的。在一个会话中,NSURLSession支持三种会话任务:数据任务(NSURLSessionDataTask)上传任务(NSURLSessionUploadTask)下载任务(NSURLSessionDownloadTask)NSURLSession的用法第4步,最后获得任务对象后,就可以对它进行如下操作:在实际使用,我们常采用默认值来简化上述步骤。letdataTask=session.dataTask(with:request,completionHandler:{(data,response,error)->Voidiniferror!=nil{print(error.debugDescription)}else{letstr=String(data:data!,encoding:String.Encoding.utf8)print(str)}})asURLSessionTaskNSURLSession的用法1.获取数据和下载文件DataTask加载数据:使用全局的URLSession.shared和dataTask方法创建。使用NSData对象来发送和接收数据。数据任务可以分片返回数据,也可以通过完成处理器一次性返回数据。由于数据任务不存储数据到文件,所以不支持后台会话示例程序6-2代码详见书本注意:苹果要求App内访问的网络必须使用HTTPS协议,为了能在iOS中访问http网络数据,必须在Xcode的工程文件中,找到Info.plist文件,在里面添加相关键值“AppTransportSecuritySetting”->“AllowArbitraryLoads”->“YES”NSURLSession的用法DownloadTask下载文件:以文件的形式接收数据,当程序不运行时支持后台下载。使用全局的URLSession.shared和dataTask方法创建。通过下载指定的图片文件到应用程序的Documents目录中,采用了时间戳,保证文件不会重名示例程序6-3代码详见书本NSURLSession的用法2.服务器设置和文件上传为了服务器能接受我们发送的文件,需要在自己的Mac电脑进行相关的设置。macOSSierra不但内置Apache服务器,还包括PHP、Python、Ruby、Perl等常用的脚本语言,这些都不需要我们自己编译安装,只需开启Apache和支持PHP即可使用。NSURLSession的用法可以通过如下命令进行开启、关闭以及重启:$sudoapachectlstart|stop|restart开启后,打开浏览器,访问http://localhost/如果出现Itworks!,则Apache可以正常使用。NSURLSession的用法macOSSierra已内置了PHP5.6,因此我们只需要在Apache的配置中加载PHP模块即可。打开Apache配置文件/etc/apache2/httpd.conf,找到如下代码,去掉前面的注释(#): #LoadModulephp5_modulelibexec/apache2/libphp5.so默认没有生成php.ini配置文件,运行如下命令生成,也可以直接拷贝改名字: $sudocp/etc/php.ini.default/etc/php.ini重启Apache后,在/Users/sean/webroot目录下新建phpinfo.php,内容如下:打开浏览器,访问http://localhost/phpinfo.php,如果出现PHP的相关信息,则配置成功。<?phpphpinfo();?>NSURLSession的用法在服务器根文件夹中建立一个uploadFiles子文件夹,然后配置能接收文件上传的服务器端程序uploadSwift.php示例程序6-4代码详见书本UploadTask上传文件:通常以文件的形式发送数据,支持后台上传示例程序6-5代码详见书本图灵机器人网络数据访问Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET、POST、PUT、DELETE就对应着对这个资源的查、改、增、删4个操作。因此,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025探索服务合同的试用期
- 2024年超临界CO2萃取装置膜生物反应器及其他项目资金申请报告代可行性研究报告
- 2025润滑油销售合同协议
- 2025全日制劳动合同
- 2025年国税局合同制人员医疗险问题
- 2025劳动合同(教师)
- 2025宜昌市存量房买卖合同
- 2025《广州市合同范本》
- 2025深圳市租赁合同协议
- 2025国内认证委托合同
- (三诊)绵阳市高中2022级高三第三次诊断性考试 历史试卷A卷(含答案)
- 麻醉专业考试试题及答案
- 2024华能四川能源开发有限公司下属单位招聘笔试参考题库附带答案详解
- 湖南省长沙市长郡教育集团2024-2025学年七年级下学期期中生物试题
- 山东省高中名校2025届高三4月校际联合检测大联考生物试题及答案
- 2025年武汉数学四调试题及答案
- 【MOOC】数学建模精讲-西南交通大学 中国大学慕课MOOC答案
- 职业病防护设施与个体防护用品的使用和维护
- 2024年全国高中数学联赛北京赛区预赛一试试题(解析版)
- 绿化养护服务投标方案(技术标)
- 中国纺织文化智慧树知到期末考试答案2024年
评论
0/150
提交评论