




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第6章創(chuàng)建機器人聊天室目錄表視圖1234圖靈機器人API網(wǎng)絡(luò)訪問URLSession基于表格的聊天界面PART01表視圖表視圖UITableView繼承自UIScrollView。一個表視圖可以由多個分段(section)組成,每個分段可以有一個頭和尾。很多情況下表視圖只有一個分段,而且不顯示頭尾。表視圖本身也可以有一個頭(顯示在第一個分段之前)和一個尾(顯示在最后一個分段之后)。一個表視圖的整體元素結(jié)構(gòu)示意如圖表視圖UITableView有以下兩種樣式(UITableViewStyle):Plain(普通樣式)和Grouped(分組樣式)。表視圖分割線(Separator),有以下三種樣式(UITableViewCellSeparatorStyle):None(無分割線)、SingleLine(單線條)和SingleLineEtched(帶浮雕效果的線條)表視圖表視圖單元格(Cell),有以下四種顯示樣式(UITableViewCellStyle):Default(左側(cè)顯示textLabel,不顯示detailTextLabel,最左邊可選顯示imageView)Value1(左側(cè)顯示textLabel,右側(cè)顯示detailTextLabel,最左邊可選顯示imageView)Value2(左側(cè)依次顯示textLabel、detailTextLabel,最左邊可選顯示imageView)Subtitle(左側(cè)上方顯示textLabel,左側(cè)下方顯示detailTextLabel,最左邊可選顯示imageView)表視圖Cell有以下四種選中樣式(UITableViewCellSelectionStyle):None、Blue、Gray和Default。附屬圖形(Accessory),有以下五種樣式(UITableViewCellAccessoryType):None(無附屬圖形)DisclosureIndicator(小箭頭)DetailDisclosureButton(詳細(xì)信息按鈕+指向右側(cè)的箭頭)Checkmark(勾號)DetailButton(詳細(xì)信息按鈕)表視圖iOS遵循MVC設(shè)計模式,很多操作通過代理和外界溝通,UITableView同理實現(xiàn)了以下兩種協(xié)議:UITableViewDelegate和UITableViewDataSource。其中UITableViewDataSource至少要實現(xiàn)以下兩個方法:numberOfRowsInSection(確定表格每個分區(qū)擁有多少行)和cellForRowAtIndexPath(提供一個表格顯示用的Cell);而UITableViewDelegate沒有必須實現(xiàn)的方法。表視圖的最簡單使用最簡單的表視圖主要包括:一個存放表格內(nèi)容的數(shù)組dataArray;一個UITableView變量myTab了View;在ViewController類聲明中繼承協(xié)議UITableViewDataSource和UITableViewDelegate,并設(shè)置委托為self;數(shù)據(jù)委托方法functableView(_tableView:UITableView,numberOfRowsInSectionsection:Int)->Int和functableView(_tableView:UITableView,cellForRowAtindexPath:IndexPath)->UITableViewCell等。表視圖的最簡單使用主要步驟:建立一個SingleView工程,然后在ViewController.swift中輸入代碼。程序運行的效果如圖表視圖的最簡單使用采用蘋果直接提供的UITableViewController來建立一個簡單的表格,這個控制器實現(xiàn)了UITableView數(shù)據(jù)源和代理協(xié)議,內(nèi)部定義了一個tableView屬性供外部訪問,同時自動鋪滿整個屏幕、自動伸縮等。1.建立一個工程TableViewSimple2.選擇Main.storyboard,拖放TableViewController組件表視圖的最簡單使用3.將TableViewController設(shè)置為啟動項或者,選擇TableViewController,找到屬性查看器,選中“IsInitialViewController”表視圖的最簡單使用4.在工程中新建一個文件5.為新文件選擇模版表視圖的最簡單使用6.為新文件設(shè)置選項7.選擇默認(rèn)位置,退出對話框表視圖的最簡單使用8.選擇Main.storyboard,關(guān)聯(lián)類和界面組件9.選擇TableViewCell,設(shè)置其標(biāo)示為Cell表視圖的最簡單使用10.修改MyTableViewController.swift代碼,運行代碼詳見書本用戶可以自行對比一下以上兩種方法的代碼。另外,如果要使用靜態(tài)表格,那就只能采用TableViewController。表視圖的一般使用我們準(zhǔn)備采用表格來顯示學(xué)生信息,主要包括學(xué)生姓名name、特點character、頭像照片headpic等。采用了Dictionary來保存一個學(xué)生數(shù)據(jù),多個學(xué)生數(shù)據(jù)保存到一個數(shù)組。代碼詳見書本程序運行的效果如圖自定義表視圖的使用自定義表視圖實際上就是指對單元格自定義,這樣就可以出現(xiàn)和傳統(tǒng)不一樣的表格樣式為了自定義單元格,我們需要新建一個類MyCell,繼承自UITableViewCell,重載其初始化函數(shù)overrideinit(style:UITableViewCellStyle,reuseIdentifier:String?),在該初始化函數(shù)中,我們重新設(shè)計了不同位置的兩個UILabel和一個UIImageView;重載了frame變量,使得單元格寬度始終為屏幕寬。代碼詳見書本PART02圖靈機器人API圖靈機器人北京光年無限科技有限公司主要從事機器人人工智能及機器人操作系統(tǒng)的研發(fā)及商業(yè)化應(yīng)用,在語義理解、機器視覺、多模態(tài)人機交互、深度學(xué)習(xí)、機器人等領(lǐng)域具備領(lǐng)先優(yōu)勢。2014年11月發(fā)布圖靈機器人(網(wǎng)址:),是中文語境下智能度最高的機器人大腦,已為超過23萬家企業(yè)和開發(fā)者提供服務(wù),廣泛應(yīng)用于機器人、智能家居、智能車載、智能客服、可穿戴設(shè)備等眾多場景。數(shù)據(jù)交換格式JSONJSON(JavaScriptObjectNotation)是一種輕量級的數(shù)據(jù)交換格式。它基于ECMAScript(w3c制定的js規(guī)范)的一個子集,采用完全獨立于編程語言的文本格式來存儲和表示數(shù)據(jù)。JSON擁有簡潔和清晰的層次結(jié)構(gòu),易于人閱讀和編寫,同時也易于機器解析和生成,并有效地提升網(wǎng)絡(luò)傳輸效率,使得JSON成為理想的數(shù)據(jù)交換語言。數(shù)據(jù)交換格式JSONJSON數(shù)據(jù)分為三種形式,對象,數(shù)組,值。對象是一個無序的“‘名稱/值’對”集合。一個對象以“{”(左括號)開始,“}”(右括號)結(jié)束。每個“名稱”后跟一個“:”(冒號);“‘名稱/值’對”之間使用“,”(逗號)分隔數(shù)組是值(value)的有序集合。一個數(shù)組以“[”(左中括號)開始,“]”(右中括號)結(jié)束。值之間使用“,”(逗號)分隔數(shù)據(jù)交換格式JSON值(value)可以是雙引號括起來的字符串(string)、數(shù)值(number)、true、false、null、對象(object)或者數(shù)組(array)。這些結(jié)構(gòu)可以嵌套。下面是一個簡單的例子:{"Name":"ChenZhifeng","Profession":"Teacher","Age":46,"Email":163.com","Friends":["ZhangSan","LiSi"]}這個數(shù)據(jù)示例,表示了這樣一個結(jié)構(gòu),首先我們的數(shù)據(jù)被一對大括號包圍,那么我們的數(shù)據(jù)就是對象類型,然后它里面有五個屬性,Name、Profession、Age、Email和Friends。其中三個屬性Name、Profession和Email字符串類型;Age屬性代表年齡,所以它的值一個Number類型的46。注意:字符串類型和數(shù)字類型的區(qū)別,字符串類型的值用一對雙引號括了起來,而數(shù)值類型不需要雙引號。最后,F(xiàn)riends屬性的值是一個數(shù)組,用一對中括號包圍起來,而數(shù)組中的元素,仍然是字符串類型。數(shù)據(jù)交換格式JSON某高校組建了一個iOS開發(fā)的興趣小組,這個小組的名稱為iOS-Orange-Team,指導(dǎo)教師為ChenZhifeng,小組的學(xué)生有3個,分別為Zhangbo、ChangWenxiang和Huyinting。{"TeamName":"iOS-Orange-Team","Teacher":"ChenZhifeng","Students":[{"Name":"ZhangBo","Hometown":"Xuzhou"},{"Name":"ChangWenxiang","Hometown":"Yancheng"},{"Name":"HuYinting","Hometown":"Suzhou"}]}數(shù)據(jù)交換格式JSON通過在瀏覽器中訪問網(wǎng)址來獲得英國倫敦的天氣預(yù)報等信息:/data/2.5/weather?q=London,uk&appid=b1b15e88fa797225412429c1c50c122a1,得到類似以下JSON數(shù)據(jù):{ "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}數(shù)據(jù)測試與解析1.圖靈機器人JSON數(shù)據(jù)測試用戶可以訪問網(wǎng)址:,然后注冊一個賬號,可以免費訪問5000次/天,其中最重要的是記住APIKey數(shù)據(jù)測試與解析在通過iOS編程訪問圖靈機器人數(shù)據(jù)之前,我們可以通過瀏覽器測試一下網(wǎng)絡(luò)是否通暢。在瀏覽器中輸入以下網(wǎng)址,其中Key=XXXXXXXXX需要修改為你剛才注冊成功后獲得的APIKey,就可以獲得如圖6-18所示的JSON數(shù)據(jù):/openapi/api?key=XXXXXXXXX&info=你是誰?&type=JSON數(shù)據(jù)測試與解析2.Swift中的JSONSerialization用戶與Web應(yīng)用通信,一般可以從服務(wù)端返回JSON格式的消息。因此在Swift的Foundation框架中,提供了JSONSerialization類可以將JSON格式的數(shù)據(jù)轉(zhuǎn)換為Swift的Dictionary、Array、String、Number和Bool等類型。數(shù)據(jù)測試與解析示例程序6-1首先建立一個字典Dictionary,包括三個數(shù)據(jù)項,其中Students這個數(shù)據(jù)項是一個數(shù)組Array(包括三個記錄,每個記錄也是一個字典Dictionary)然后判斷這個字典中的數(shù)據(jù)是否符合轉(zhuǎn)換為JSON格式的合法性,如果數(shù)據(jù)格式正確,則調(diào)用JSONSerialization.data轉(zhuǎn)換為data最后JSONSerialization.jsonObject將data中JSON格式重新解析為字典。代碼詳見書本數(shù)據(jù)測試與解析示例程序6-1運行結(jié)果PART03網(wǎng)絡(luò)訪問URLSession網(wǎng)絡(luò)訪問URLSessionNSURLSession是蘋果提供的原生網(wǎng)絡(luò)訪問類,提供了配置每個會話的緩存、協(xié)議、cookie和證書政策(credentialpolicies),甚至跨應(yīng)用程序共享它們的能力。這使得框架的網(wǎng)絡(luò)基礎(chǔ)架構(gòu)和部分應(yīng)用程序獨立工作,而不會互相干擾。每一個NSURLSession對象都是根據(jù)一個NSURLSessionConfiguration初始化的,該NSURLSessionConfiguration指定策略,以及一系列為了提高移動設(shè)備性能而專門添加的新選項。NSURLSession的另一重要組成部分是會話任務(wù),它負(fù)責(zé)處理數(shù)據(jù)的加載,以及客戶端與服務(wù)器之間的文件和數(shù)據(jù)的上傳下載服務(wù)。注意:由于NSURLSession采用的是“異步阻塞”模型,所以在實現(xiàn)代理方法更新UI時需要將線程切回主線程。NSURLSession的用法先根據(jù)會話對象創(chuàng)建一個請求Task然后執(zhí)行該Task即可。NSURLSessionTask本身是一個抽象類,在使用的時候,通常是根據(jù)具體的需求使用它的幾個子類NSURLSession的用法NSURLSession使用的第1步需要配置會話模式,其支持以下三種會話模式:默認(rèn)會話模式(default):默認(rèn)模式,基于磁盤緩存的持久化策略,使用用戶keychain中保存的證書進行認(rèn)證授權(quán)。瞬時會話模式(ephemeral):不儲存任何數(shù)據(jù)在磁盤中,所有數(shù)據(jù)都保存在RAM中,當(dāng)會話結(jié)束后,緩存數(shù)據(jù)將被清空。后臺會話模式(background):該模式類似于默認(rèn)模式,只是將上傳和下載移至后臺處理,需要一個提供一個String用于標(biāo)識后臺會話。NSURLSession的用法第2步,在配置完會話模式后,就可以獲取NSURLSession對象了。獲取對象的方法有以下幾種:sharedSession獲取的會話使用的是默認(rèn)配置(default),全局共享的Cookies,Cache和證書。使用構(gòu)造器構(gòu)造一個指定配置的會話對象。使用構(gòu)造器構(gòu)造一個指定配置對象,并指定代理及代理列隊。NSURLSession的用法第3步,在獲取完會話對象后,就需要設(shè)定會話任務(wù)了。在這里是通過建立一個會話任務(wù)對象來實現(xiàn)布置任務(wù)的。在一個會話中,NSURLSession支持三種會話任務(wù):數(shù)據(jù)任務(wù)(NSURLSessionDataTask)上傳任務(wù)(NSURLSessionUploadTask)下載任務(wù)(NSURLSessionDownloadTask)NSURLSession的用法第4步,最后獲得任務(wù)對象后,就可以對它進行如下操作:在實際使用,我們常采用默認(rèn)值來簡化上述步驟。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.獲取數(shù)據(jù)和下載文件DataTask加載數(shù)據(jù):使用全局的URLSession.shared和dataTask方法創(chuàng)建。使用NSData對象來發(fā)送和接收數(shù)據(jù)。數(shù)據(jù)任務(wù)可以分片返回數(shù)據(jù),也可以通過完成處理器一次性返回數(shù)據(jù)。由于數(shù)據(jù)任務(wù)不存儲數(shù)據(jù)到文件,所以不支持后臺會話示例程序6-2代碼詳見書本注意:蘋果要求App內(nèi)訪問的網(wǎng)絡(luò)必須使用HTTPS協(xié)議,為了能在iOS中訪問http網(wǎng)絡(luò)數(shù)據(jù),必須在Xcode的工程文件中,找到Info.plist文件,在里面添加相關(guān)鍵值“AppTransportSecuritySetting”->“AllowArbitraryLoads”->“YES”NSURLSession的用法DownloadTask下載文件:以文件的形式接收數(shù)據(jù),當(dāng)程序不運行時支持后臺下載。使用全局的URLSession.shared和dataTask方法創(chuàng)建。通過下載指定的圖片文件到應(yīng)用程序的Documents目錄中,采用了時間戳,保證文件不會重名示例程序6-3代碼詳見書本NSURLSession的用法2.服務(wù)器設(shè)置和文件上傳為了服務(wù)器能接受我們發(fā)送的文件,需要在自己的Mac電腦進行相關(guān)的設(shè)置。macOSSierra不但內(nèi)置Apache服務(wù)器,還包括PHP、Python、Ruby、Perl等常用的腳本語言,這些都不需要我們自己編譯安裝,只需開啟Apache和支持PHP即可使用。NSURLSession的用法可以通過如下命令進行開啟、關(guān)閉以及重啟:$sudoapachectlstart|stop|restart開啟后,打開瀏覽器,訪問http://localhost/如果出現(xiàn)Itworks!,則Apache可以正常使用。NSURLSession的用法macOSSierra已內(nèi)置了PHP5.6,因此我們只需要在Apache的配置中加載PHP模塊即可。打開Apache配置文件/etc/apache2/httpd.conf,找到如下代碼,去掉前面的注釋(#): #LoadModulephp5_modulelibexec/apache2/libphp5.so默認(rèn)沒有生成php.ini配置文件,運行如下命令生成,也可以直接拷貝改名字: $sudocp/etc/php.ini.default/etc/php.ini重啟Apache后,在/Users/sean/webroot目錄下新建phpinfo.php,內(nèi)容如下:打開瀏覽器,訪問http://localhost/phpinfo.php,如果出現(xiàn)PHP的相關(guān)信息,則配置成功。<?phpphpinfo();?>NSURLSession的用法在服務(wù)器根文件夾中建立一個uploadFiles子文件夾,然后配置能接收文件上傳的服務(wù)器端程序uploadSwift.php示例程序6-4代碼詳見書本UploadTask上傳文件:通常以文件的形式發(fā)送數(shù)據(jù),支持后臺上傳示例程序6-5代碼詳見書本圖靈機器人網(wǎng)絡(luò)數(shù)據(jù)訪問Http定義了與服務(wù)器交互的不同方法,最基本的方法有4種,分別是GET,POST,PUT,DELETE。URL全稱是資源描述符,我們可以這樣認(rèn)為:一個URL地址,它用于描述一個網(wǎng)絡(luò)上的資源,而HTTP中的GET、POST、PUT、DELETE就對應(yīng)著對這個資源的查、改、增、刪4個操作。因此,GET一般用于獲取/查詢資源信息,而POST一般用于更新資源信息
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 漁船租賃業(yè)務(wù)合同協(xié)議
- 銀行信托計劃保管合同模板
- 供港農(nóng)產(chǎn)品購銷合同代理協(xié)議(樣本)
- 國有林權(quán)出讓合同
- 畢業(yè)生實習(xí)與勞動合同解析
- 渠道合作銷售合同范本
- 合同法視角:股東不履行義務(wù)糾紛案例分析
- 新車銷售團隊心理素質(zhì)訓(xùn)練考核試卷
- 木制拼圖游戲考核試卷
- 世界音樂教育項目的策劃與實施考核試卷
- 人力資源管理咨詢服務(wù)合作協(xié)議
- T-HNEE 006-2024 超級能效工廠評價導(dǎo)則
- 《數(shù)字經(jīng)濟概論》課程教學(xué)大綱
- 2024-2025學(xué)年高一上學(xué)期期末數(shù)學(xué)試卷(新題型:19題)(基礎(chǔ)篇)(含答案)
- 高血壓課件教學(xué)課件
- 天津市紅橋區(qū)2023-2024學(xué)年高二上學(xué)期期末考試化學(xué)試題(含答案)
- 《鐵道概論(第二版)》 課件 第8章 鐵路運輸組織
- lng加工合同范例
- 高速公路數(shù)據(jù)采集技術(shù)規(guī)范
- 2024年下半年神農(nóng)架林區(qū)林投集團招聘工作人員6名易考易錯模擬試題(共500題)試卷后附參考答案
- 工程機械租賃合同范本標(biāo)準(zhǔn)版
評論
0/150
提交評論