swift tabview 帶引數請求網路。多條目展示。json解析,逃逸閉包
效果:
用到的第三方
# Uncomment the next line to define a global platform for your project
platform :ios, '9.0'
target 'News' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# Pods for News
pod 'Alamofire'
pod 'SwiftyJSON'
pod 'HandyJSON'
end
請求網路地址與引數
//
// Const.swift
// News
//
// Created by liuan on 2020/10/7.
//
import UIKit
let screenWidth = UIScreen.main.bounds.width
let screentHeight = UIScreen.main.bounds.height
//伺服器請求
let BASE_URL = "https://is.snssdk.com"
let device_id:String = "6096495334"
let IID:String = "5034850950"
資料bean
//
// MyCellModel.swift
// News
//
// Created by liuan on 2020/10/7.
//
import Foundation
import HandyJSON
struct MyCellModel:HandyJSON {
var grey_text:String = ""
var text:String = ""
var url:String = ""
var key:String = ""
var tip_new:Int = 0
}
struct MyConcern:HandyJSON {
var name:String?
var url:String?
var total_count:Int?
var description:String?
var time:String?
var type:String?
var icon:String?
var userid:Int?
var is_verify:Bool?
var media_id:Int?
var tips:Bool?
var id:Int?
var user_auth_info:String?
var userAuthInfo: UserAuthInfo?{
return UserAuthInfo.deserialize(from:user_auth_info)
}
}
struct UserAuthInfo: HandyJSON {
var auth_type:Int?
var auth_info:String?
}
網路請求工具類,用到了逃逸閉包,返回請求引數後重新整理了網路請求
//
// NetworkToolProtocol.swift
// News
//
// Created by liuan on 2020/10/7.
//
import Foundation
import Alamofire
import SwiftyJSON
protocol NetworkoolProtocol {
// -----------我的mine--------
// 我的介面 cell的資料
static func loadmyCellData(completioHandler: @escaping(_ sections:[[MyCellModel]])->())
//我的關注資料
static func loadMyConcern()
}
extension NetworkoolProtocol{
}
struct NetworkTool:NetworkoolProtocol {
// -----------我的mine--------
// 我的介面 cell的資料
static func loadmyCellData(completioHandler: @escaping(_ sections:[[MyCellModel]])->()) {
let url = BASE_URL + "/user/tab/tabs/?"
let params = ["device_id":device_id]
Alamofire.request(url,parameters: params).responseJSON{(response) in
guard response.result.isSuccess else{
//d網路錯誤提示資訊
return
}
if let value = response.result.value{
//swiftyjson裡面的
let json = JSON(value)
print(value)
guard json["message"]=="success" else {
return
}
if let data = json["data"].dictionary{
if let sections = data["sections"]?.array{
var sectionnArray = [[MyCellModel]]()
for item in sections {
var rows = [MyCellModel]()
for row in item.arrayObject! {
let myCellModel = MyCellModel.deserialize(from: row as? NSDictionary)
rows.append(myCellModel!)
}
sectionnArray.append(rows)
}
completioHandler(sectionnArray)
}
}
}
}
}
//我的關注資料
static func loadMyConcern() {
}
}
主要的tabView Controller
//
// MineViewController.swift
// News
//
// Created by liuan on 2020/10/5.
//
import UIKit
class MineViewController: UITableViewController {
var sections = [[MyCellModel]]()
override func viewDidLoad() {
super.viewDidLoad()
tableView.tableFooterView = UIView()
tableView.backgroundColor = UIColor.globalBackGroundColor()
tableView.register( UINib(nibName: String(describing:MyOtherCell.self), bundle: nil), forCellReuseIdentifier: String(describing:MyOtherCell.self))
//獲取我的cell的資料
NetworkTool.loadmyCellData{(sections) in
let string = "{\"text\":\"我的關注\",\"grey_text\":\"\"}"
let myConcern = MyCellModel.deserialize(from: string)
var myConcerns = [MyCellModel]()
myConcerns.append(myConcern!)
self.sections.append(myConcerns)
self.sections+=sections
self.tableView.reloadData()
}
}
}
extension MineViewController{
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 10
}
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let view = UIView(frame: CGRect(x: 0, y: 0, width: screenWidth, height: 10))
view.backgroundColor = UIColor.globalBackGroundColor()
return view
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return sections[section].count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: MyOtherCell.self)) as! MyOtherCell
let section = sections[indexPath.section]
let myCellModel = section[indexPath.row]
cell.leftLabel.text = myCellModel.text
cell.rightLabel.text = myCellModel.grey_text
return cell
}
override func numberOfSections(in tableView: UITableView) -> Int {
return sections.count
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
}
}
UIColor 擴充套件
//
// UiColorExtension.swift
// geekTime
//
// Created by liuan on 2020/9/14.
// Copyright © 2020 liuan. All rights reserved.
//
import UIKit
extension UIColor {
static func hexColor(_ hexValue:Int,alpahValue:Float)->UIColor{
return UIColor(red: CGFloat((hexValue & 0xFF0000) >> 16 ) / 255, green: CGFloat((hexValue & 0x00FF00) >> 8) / 255, blue: CGFloat(hexValue & 0x0000FF ) / 255, alpha: CGFloat(alpahValue))
}
static func hexColor(_ hexValue:Int)->UIColor{
return hexColor(hexValue,alpahValue: 1)
}
convenience init(_ hexValue:Int,alpahValue:Float) {
self.init(red: CGFloat((hexValue & 0xFF0000) >> 16 ) / 255, green: CGFloat((hexValue & 0x00FF00) >> 8) / 255, blue: CGFloat(hexValue & 0x0000FF ) / 255, alpha: CGFloat(alpahValue))
}
convenience init(_ hexValue:Int) {
self.init(hexValue,alpahValue:1)
}
convenience init(r:CGFloat,g:CGFloat,b:CGFloat,alpha:CGFloat = 1.0){
self.init(displayP3Red: r/255.0, green: g/255.0, blue: b/255.0, alpha: alpha)
}
class func globalBackGroundColor() -> UIColor{
return UIColor(r: 248, g: 249, b: 247)
}
}
用到了 MyOtherCell +xlib
//
// MyOtherCell.swift
// News
//
// Created by liuan on 2020/10/7.
//
import UIKit
class MyOtherCell: UITableViewCell {
@IBOutlet weak var leftLabel: UILabel!
@IBOutlet weak var rightLabel: UILabel!
@IBOutlet weak var rightImageView: UIImageView!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
xlib 不知道程式碼如何複製
就是這個樣子的
相關文章
- Swift-逃逸閉包、自動閉包Swift
- Swift 3 網路請求+資料解析Swift
- SpringMVC請求引數解析SpringMVC
- dio+json_serializable從網路請求到資料解析JSON
- Swift 掌控Moya的網路請求、資料解析與快取Swift快取
- Swift:面向協議的網路請求Swift協議
- Swift 網路請求 : Moya初步認識Swift
- Flutter基礎(十一)網路請求(Dio)與JSON資料解析FlutterJSON
- Flutter 基礎(十一)網路請求(Dio)與 JSON 資料解析FlutterJSON
- java傳送get請求帶引數Java
- spring cloud gateway 原始碼解析(3)記錄請求引數及返回的jsonSpringCloudGateway原始碼JSON
- js網路請求 短時間發出多個 展示最新響應JS
- OKHttp網路請求原理流程解析HTTP
- Retrofit網路請求原始碼解析原始碼
- Swift 閉包Swift
- 有趣的請求引數/請求頭
- Retrofit原始碼解析之網路請求原始碼
- Volley 原始碼解析之網路請求原始碼
- Blazor Server 發起HttpPost請求,但是多引數BlazorServerHTTP
- Swift iOS : 解析jsonSwiftiOSJSON
- 輕鬆搞定Retrofit不同網路請求方式的請求引數配置,及常用註解使用
- linux 下用 Wget 傳送 帶引數的請求Linuxwget
- Android網路請求(4) 網路請求框架VolleyAndroid框架
- Android網路請求(終) 網路請求框架RetrofitAndroid框架
- Android網路請求(3) 網路請求框架OkHttpAndroid框架HTTP
- Springboot請求引數解密Spring Boot解密
- 輕鬆搞定Retrofit不同網路請求方式的請求引數配置,Retrofit常用註解的使用
- springmvc引數設定預設值,多地址請求SpringMVC
- 後臺接收Json請求引數相容陣列和單個物件JSON陣列物件
- JavaScript逆向之iwencai請求頭引數加密過程解析JavaScriptAI加密
- 利用閉包傳遞引數
- 跟我一起動手實現Tomcat(三):解析Request請求引數、請求頭、cookieTomcatCookie
- Charles 修改請求(Request)引數
- 請求引數的傳遞
- fastapi 請求引數 校驗ASTAPI
- Swift 使用lexicographicallyprecedes 多個引數排序Swift排序
- swagger測試的時候,post請求引數的格式不是json格式SwaggerJSON
- 網路請求了