之前在swift3的時候,寫過相似的,那個時候尚未很成熟的網絡請求類庫,在這裏,仍是衷心感謝大神們的付出!json
具體效果以下,先上圖:swift
點擊按鈕的時候,請求數據,數據結構以下:api
{ "error_code" = 0; reason = successed; result = ( { des = "\U68a6\U89c1\U9ec4\U91d1\Uff0c\U9884\U793a\U4f1a\U906d\U9047\U632b\U6298\U3002\U68a6\U89c1\U6709\U4eba\U9001\U9ec4\U91d1\U7ed9\U81ea\U5df1\Uff0c\U53ef\U80fd\U4f1a\U8499\U53d7\U635f\U5931\U3002\U5973\U4eba\U68a6\U89c1\U4e22\U4e86\U9ec4\U91d1\Uff0c\U9884\U793a\U6dfb\U7f6e\U65b0\U9996\U9970\U3002"; id = 873e943d1bcb40cd4b289e0809803343; title = "\U9ec4\U91d1 \U91d1\U5b50"; }, { des = "\U68a6\U89c1\U9ec4\U91d1\Uff0c\U9884\U793a\U4f1a\U906d\U9047\U632b\U6298\U3002\U68a6\U89c1\U6709\U4eba\U9001\U9ec4\U91d1\U7ed9\U81ea\U5df1\Uff0c\U53ef\U80fd\U4f1a\U8499\U53d7\U635f\U5931\U3002\U5973\U4eba\U68a6\U89c1\U4e22\U4e86\U9ec4\U91d1\Uff0c\U9884\U793a\U6dfb\U7f6e\U65b0\U9996\U9970\U3002"; id = 237169518a0ff81aec29b80a546aa7ac; title = "\U9ec4\U91d1"; }, { des = "\U68a6\U89c1\U6361\U9ec4\U91d1\Uff0c\U4f60\U8981\U53d1\U5927\U8d22\Uff0c\U4f46\U8981\U52aa\U529b\U4e89\U53d6\U3002\U53d1\U8d22\U4e5f\U8981\U4ed8\U51fa\U52aa\U529b\Uff0c\U4e0d\U4f1a\U81ea\U52a8\U6389\U5728\U4f60\U7684\U53e3\U888b\U91cc\U3002"; id = 315f055cfbae60064e07427321e6a722; title = "\U6361\U9ec4\U91d1"; } ); }
具體代碼以下:網絡
一、目錄結構數據結構
由於是在oc項目裏面直接寫的swift,因此橋接文件相關的知識點,能夠參考這篇博客:ide
https://www.jianshu.com/p/754396e7e1bd,還用到了公共類,能夠參考個人另外一篇博客工具
二、先佈局,最上面是個textfield,中間是個buutton,最下層是個tableview,使用的事自定義的cell(xib),代碼以下:佈局
func setUI() { self.textField = UITextField() self.textField.placeholder = "請輸入你夢境中夢到的人、事或者物" self.view.addSubview(self.textField) self.textField.snp.makeConstraints { (make) in make.centerX.equalTo(self.view) make.top.equalTo(100) make.left.equalTo(16) make.height.equalTo(40) } let button:UIButton = UIButton(type: .custom) button.setTitle("點擊", for: .normal) button.backgroundColor = UIColor.red self.view.addSubview(button) button.addTarget(self, action: #selector(sendAction), for: .touchUpInside) button.snp.makeConstraints { (make) in make.centerX.equalTo(self.view) make.top.equalTo(self.textField.snp.bottom).offset(10) make.left.equalTo(16) make.height.equalTo(45) } self.table = UITableView(frame: CGRect(x: 0, y: 200, width:ScrnWidth , height: ScrnHeight-100),style: .plain) self.table.delegate = self self.table.dataSource = self self.table.register(UINib(nibName: "MyCell", bundle: nil), forCellReuseIdentifier: "mycell") self.view.addSubview(self.table) self.table.estimatedRowHeight = UITableView.automaticDimension self.table.tableFooterView = UIView() }
三、工具類:網絡請求類Alamofire,這裏簡單封裝了下:post
import UIKit import Alamofire import SwiftyJSON enum MethodType { case get case post } class SwiftRequest { class func requestData(_ type : MethodType, URLString : String, parameters : [String : Any]? = nil, finishedCallback : @escaping (_ result : Any) -> ()) { // 1.獲取類型 let method = type == .get ? HTTPMethod.get : HTTPMethod.post // 2.發送網絡請求 Alamofire.request(URLString, method: method, parameters: parameters).responseJSON { (response) in // 3.獲取結果 guard let result = response.result.value else { print(response.result.error!) return } // 4.將結果回調出去 finishedCallback(result) } } }
所有代碼以下:spa
import UIKit import SnapKit import SwiftyJSON class OpenDreamViewController: UIViewController,UITableViewDelegate,UITableViewDataSource { lazy var table = UITableView() var textField = UITextField() lazy var dataArray = NSArray() override func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor = UIColor.white self.setUI() } func setUI() { self.textField = UITextField() self.textField.placeholder = "請輸入你夢境中夢到的人、事或者物" self.view.addSubview(self.textField) self.textField.snp.makeConstraints { (make) in make.centerX.equalTo(self.view) make.top.equalTo(100) make.left.equalTo(16) make.height.equalTo(40) } let button:UIButton = UIButton(type: .custom) button.setTitle("點擊", for: .normal) button.backgroundColor = UIColor.red self.view.addSubview(button) button.addTarget(self, action: #selector(sendAction), for: .touchUpInside) button.snp.makeConstraints { (make) in make.centerX.equalTo(self.view) make.top.equalTo(self.textField.snp.bottom).offset(10) make.left.equalTo(16) make.height.equalTo(45) } self.table = UITableView(frame: CGRect(x: 0, y: 200, width:ScrnWidth , height: ScrnHeight-100),style: .plain) self.table.delegate = self self.table.dataSource = self self.table.register(UINib(nibName: "MyCell", bundle: nil), forCellReuseIdentifier: "mycell") self.view.addSubview(self.table) self.table.estimatedRowHeight = UITableView.automaticDimension self.table.tableFooterView = UIView() } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.dataArray.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell:MyCell = tableView.dequeueReusableCell(withIdentifier: "mycell") as! MyCell let dict = self.dataArray[indexPath.row] as! NSDictionary cell.titleLab.text = dict["title"] as? String cell.contentLab.text = (dict["des"] as? String) return cell } func setData() { let parameters : [String : String] = ["q" : self.textField.text!,"key":key] SwiftRequest.requestData(.get, URLString: "http://zhouxunwang.cn/data/?id=60", parameters: parameters) { (result) in print(result) let Dict = result as! NSDictionary let error = Dict["error_code"] as! Int64 if error == 0{ self.dataArray = Dict["result"] as! NSArray }else{ print("請求失敗") } self.table.reloadData() } } @objc func sendAction() { self.textField.endEditing(true) print("點擊了") if (self.textField.text?.isEmpty ?? nil)! { print("不能爲空") return }else{ self.setData() } } }
以上就是簡單封裝一個請求類,請求數據的的一個簡單demo,上面的接口是免費的能夠直接用!
僅作記錄!後期會陸續加上swiftjson和model