2018-05-31 請求網(wǎng)絡數(shù)據(jù)GET/POST

NewsViewController 頁面

import UIKit

let scrWidth = UIScreen.main.bounds.size.width? // 寬度

let scrHeight = UIScreen.main.bounds.size.height? // 高度

// 給UIViewController 類添加擴展

extension UIViewController {

? ? funcshowAlert(msg:String,sec:TimeInterval) {

? ? ? ? // 實例化彈出控制器

? ? ? ? letalertVC =UIAlertController(title:nil, message: msg, preferredStyle: .alert)


? ? ? ? // 從vc 控制器彈出提示控制器

? ? ? ? self.present(alertVC, animated:true, completion:nil)


? ? ? ? // 延時執(zhí)行隱藏操作

? ? ? ? self.perform(#selector(hideAlertVC(sender:)), with: alertVC, afterDelay: sec)


? ? }


? ? @objcfunchideAlertVC(sender:UIAlertController)? {

? ? ? ? sender.dismiss(animated:true, completion:nil)

? ? }

}

class NewsViewController: UIViewController,UITextFieldDelegate {


? ? varnewsTF:UITextField?? // 菜譜輸入框

? ? varsearchBtn:UIButton?? // 搜索按鈕


? ? overridefuncviewDidLoad() {

? ? ? ? super.viewDidLoad()

? ? ? ? // 設置背景顏色

? ? ? ? self.view.backgroundColor = UIColor.white


? ? ? ? newsTF=UITextField(frame:CGRect(x:0, y:0, width:200, height:50))

? ? ? ? newsTF?.center=CGPoint(x:scrWidth/2, y:200)

? ? ? ? newsTF?.borderStyle= .line

? ? ? ? newsTF?.placeholder="請輸入查詢的新聞"

?? ? ? newsTF?.textColor = UIColor.blue

? ? ? ? newsTF?.textAlignment= .center

? ? ? ? newsTF?.clearButtonMode = .whileEditing

? ? ? ? newsTF?.delegate=self

? ? ? ? self.view.addSubview(newsTF!)


? ? ? ? searchBtn=UIButton(frame:CGRect(x:0, y:0, width:100, height:50))

? ? ? ? searchBtn?.center=CGPoint(x:scrWidth/2, y:300)

? ? ? ? searchBtn?.setTitle("點擊查詢", for: .normal)

? ? ? ? searchBtn?.backgroundColor = UIColor.yellow

? ? ? ? searchBtn?.setTitleColor(UIColor.black, for: .normal)

? ? ? ? searchBtn?.addTarget(self, action:#selector(btnDidPress(sender:)), for: .touchUpInside)

? ? ? ? self.view.addSubview(searchBtn!)

? ? }

? ? @objcfuncbtnDidPress(sender:UIButton) {

? ? ? ? if(newsTF?.text?.isEmpty)! {

? ? ? ? self.showAlert(msg:"信息不可為空", sec:2.5)

? ? ? ? return

? ? ? ? }


? ? ? ? // 實例化控制器對象

? ? ? ? let resultVC = NewsResultViewController()


? ? ? ? // 傳遞數(shù)據(jù)

? ? ? ? resultVC.passString=newsTF!.text!


? ? ? ? self.navigationController?.pushViewController(resultVC, animated:true)

? ? }


? ? // MARK -----------UITextFiledDelegate -------

? ? // 點擊return 隱藏鍵盤

? ? functextFieldShouldReturn(_textField:UITextField) ->Bool{


? ? ? ? // 放棄第一響應這

? ? ? ? textField.resignFirstResponder()

? ? ? ? return true

? ? }


? ? // ------ touches Method ------

? ? overridefunctouchesEnded(_touches:Set, with event:UIEvent?) {

? ? ? ? super.touchesEnded(touches, with: event)

? ? ? ? newsTF?.resignFirstResponder()

? ? ? ? self.view.endEditing(true)

? ? }


}


NewsResultViewController 頁面

import UIKit

class NewsResultViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {


? ? vartable:UITableView?

? ? vartableData:[News]?


? ? varpassString:String=""


? ? overridefuncviewDidLoad() {

? ? ? ? super.viewDidLoad()


? ? ? ? self.view.backgroundColor = UIColor.white

? ? ? ? self.navigationItem.title = "\"\(passString)\"的搜索結果"


? ? ? ? table=UITableView(frame:CGRect(x:0, y:0, width:scrWidth, height:scrHeight),style: .plain)

? ? ? ? table?.rowHeight=260.0

? ? ? ? table?.delegate=self

? ? ? ? table?.dataSource=self

? ? ? ? self.view.addSubview(table!)



? ? }

? ? overridefuncviewWillAppear(_animated:Bool) {


? ? ? ? // 請求網(wǎng)絡數(shù)據(jù)

? ? ? ? leturlSer =URLService()

? ? ? ? urlSer.getNewsBySearch(search:self.passString, vc:self) { (data, success)in

? ? ? ? ? ? if!success {

? ? ? ? ? ? ? ? return

? ? ? ? ? ? }

? ? ? ? ? ? print(data)

? ? ? ? ? ? self.tableData= dataas? [News]

? ? ? ? ? ? DispatchQueue.main.async {

? ? ? ? ? ? ? ? self.table?.reloadData()

? ? ? ? ? ? }


? ? ? ? }


? ? }


? ? functableView(_tableView:UITableView, numberOfRowsInSection section:Int) ->Int{

? ? ? ? ifletcount =tableData?.count{

? ? ? ? ? ? returncount

? ? ? ? }

? ? ? ? return0

? ? }


? ? functableView(_tableView:UITableView, cellForRowAt indexPath:IndexPath) ->UITableViewCell{

? ? ? ? letidentifier ="cell"

? ? ? ? varcell = tableView.dequeueReusableCell(withIdentifier: identifier)

? ? ? ? ifcell ==nil{

? ? ? ? ? ? cell =UITableViewCell.init(style: .value1, reuseIdentifier: identifier)

? ? ? ? ? ? letlab =UILabel(frame:CGRect(x:0, y:0, width:scrWidth, height:30))

? ? ? ? ? ? cell?.addSubview(lab)


? ? ? ? ? ? letlab2 =UILabel(frame:CGRect(x:0, y:40, width:scrWidth, height:30))

? ? ? ? ? ? cell?.addSubview(lab2)


? ? ? ? ? ? letlab3 =UILabel(frame:CGRect(x:0, y:80, width:scrWidth, height:80))

? ? ? ? ? ? lab3.numberOfLines=2

? ? ? ? ? ? cell?.addSubview(lab3)


? ? ? ? ? ? letone =self.tableData![indexPath.row]as?News

? ? ? ? ? ? lab.text= one?.city

? ? ? ? ? ? lab2.text= one?.address


? ? ? ? ? ? lab3.text= one?.content

? ? ? ? }


? ? ? ? returncell!

? ? }


}

Model類:

創(chuàng)建一些屬性:比如

import UIKit

classNews:NSObject{


? ? varprovince:String?

? ? vartown:String?

? ? varcity:String?

? ? varaddress:String?

? ? varnum:Int?

? ? varcontent:String?


}

URLSeivice類:

import UIKit

classURLService:NSObject{


? ? // 請求搜索的數(shù)據(jù)

? ? funcgetNewsBySearch(search:String,vc:UIViewController,completion:@escaping(Any,Bool) ->Void) {

? ? ? ? // 判斷無網(wǎng)狀態(tài)

? ? ? ? if Reachability.forLocalWiFi().currentReachabilityStatus() == NotReachable && Reachability.forInternetConnection().currentReachabilityStatus() == NotReachable? {

? ? ? ? ? ? vc.showAlert(msg:"網(wǎng)絡錯誤,請檢查網(wǎng)絡", sec:2.5)

? ? ? ? ? ? completion("error",false)

? ? ? ? ? ? return

? ? ? ? }


? ? ? ? // (2) 狀態(tài)欄中的菊花開始轉

? ? ? ? UIApplication.shared.isNetworkActivityIndicatorVisible = true


? ? ? ? // (3) 網(wǎng)址字符串封裝

? ? ? ? let url = URL.init(string: "http://api.jisuapi.com/illegaladdr/city")



? ? ? ? // 創(chuàng)建請求對象

? ? ? ? varreq =URLRequest.init(url: url!, cachePolicy: .reloadIgnoringCacheData, timeoutInterval:15.0)


? ? ? ? // 設置請求方式為POST

? ? ? ? req.httpMethod="POST"


? ? ? ? // 將所有的參數(shù)拼接成一個字符串

? ? ? ? let str = "city=\(search)&num=10&appkey=de394933e1a3e2db"


? ? ? ? // 設置請求對象的請求體

? ? ? ? req.httpBody= str.data(using: .utf8)


? ? ? ? //(5) 會話對象請求網(wǎng)絡數(shù)據(jù)

? ? ? ? URLSession.shared.dataTask(with: req) { (data:Data?, success:URLResponse?, error:Error?)in

? ? ? ? ? ? // 回到UI主線程停止菊花

? ? ? ? ? ? DispatchQueue.main.async {

? ? ? ? ? ? ? ? UIApplication.shared.isNetworkActivityIndicatorVisible = false

? ? ? ? ? ? }


? ? ? ? ? ? // 如果服務器連接失敗

? ? ? ? ? ? iferror !=? nil{

? ? ? ? ? ? ? ? DispatchQueue.main.async{

? ? ? ? ? ? ? ? ? ? vc.showAlert(msg:"服務器連接失敗", sec:2.5)

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? return

? ? ? ? ? ? }


? ? ? ? ? ? // JSON解析

? ? ? ? ? ? letjsonData =try?JSONSerialization.jsonObject(with: data!, options: .allowFragments)

? ? ? ? ? ? ifjsonData ==nil{

? ? ? ? ? ? ? ? DispatchQueue.main.async{

? ? ? ? ? ? ? ? ? ? vc.showAlert(msg:"網(wǎng)絡數(shù)據(jù)錯誤", sec:2.5)

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? return

? ? ? ? ? ? }

? ? ? ? ? ? // 如果正確將json解析數(shù)據(jù)回傳個controller

? ? ? ? ? ? letjsonDic = jsonDataas!NSDictionary

? ? ? ? ? ? letstatus = jsonDic.value(forKeyPath:"status")as!NSString


? ? ? ? ? ? letmsg = jsonDic.value(forKeyPath:"msg")as!String


? ? ? ? ? ? ifstatus.intValue!=0{

? ? ? ? ? ? ? ? DispatchQueue.main.async{

? ? ? ? ? ? ? ? ? ? vc.showAlert(msg: msg, sec:2.5)

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? return

? ? ? ? ? ? }


? ? ? ? ? ? // 得到json數(shù)據(jù)中result字段對應的字典

? ? ? ? ? ? letresultDic = jsonDic.value(forKeyPath:"result")as!NSArray


? ? ? ? ? ? // Model封裝

? ? ? ? ? ? varmodelArr:[News] = []

? ? ? ? ? ? // 遍歷數(shù)組中的每個字典

? ? ? ? ? ? foriteminresultDic {

? ? ? ? ? ? ? ? letitemDic = itemas!NSDictionary

? ? ? ? ? ? ? ? letone =News()

? ? ? ? ? ? ? ? one.province= itemDic.value(forKey:"province")as?String

? ? ? ? ? ? ? ? one.city= itemDic.value(forKey:"city")as?String

? ? ? ? ? ? ? ? one.town= itemDic.value(forKey:"town")as?String

? ? ? ? ? ? ? ? one.address= itemDic.value(forKey:"address")as?String

? ? ? ? ? ? ? ? one.num= itemDic.value(forKey:"num")as?Int

? ? ? ? ? ? ? ? one.content= itemDic.value(forKey:"content")as?String

? ? ? ? ? ? ? ? modelArr.append(one)

? ? ? ? ? ? }

? ? ? ? ? ? completion(modelArr,true)

? ? ? ? }.resume()


? ? }



}

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市铭腕,隨后出現(xiàn)的幾起案子配乓,更是在濱河造成了極大的恐慌诬辈,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抠藕,死亡現(xiàn)場離奇詭異录择,居然都是意外死亡,警方通過查閱死者的電腦和手機鳖敷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來程拭,“玉大人定踱,你說我怎么就攤上這事∈研” “怎么了崖媚?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長恤浪。 經(jīng)常有香客問我畅哑,道長,這世上最難降的妖魔是什么水由? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任荠呐,我火速辦了婚禮,結果婚禮上砂客,老公的妹妹穿的比我還像新娘泥张。我一直安慰自己,他們只是感情好鞠值,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布媚创。 她就那樣靜靜地躺著,像睡著了一般齿诉。 火紅的嫁衣襯著肌膚如雪筝野。 梳的紋絲不亂的頭發(fā)上晌姚,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天粤剧,我揣著相機與錄音歇竟,去河邊找鬼。 笑死抵恋,一個胖子當著我的面吹牛焕议,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播弧关,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼盅安,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了世囊?” 一聲冷哼從身側響起别瞭,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎株憾,沒想到半個月后蝙寨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡嗤瞎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年墙歪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贝奇。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡虹菲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出掉瞳,到底是詐尸還是另有隱情毕源,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布陕习,位于F島的核電站霎褐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏衡查。R本人自食惡果不足惜瘩欺,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拌牲。 院中可真熱鬧俱饿,春花似錦、人聲如沸塌忽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽土居。三九已至枣购,卻和暖如春嬉探,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背棉圈。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工涩堤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人分瘾。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓胎围,卻偏偏與公主長得像,于是被迫代替她去往敵國和親德召。 傳聞我的和親對象是個殘疾皇子白魂,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容