首页 > 其他分享 >swift tabview 带参数请求网络。多条目展示。json解析,逃逸闭包

swift tabview 带参数请求网络。多条目展示。json解析,逃逸闭包

时间:2023-04-04 18:08:09浏览次数:37  
标签:闭包 String tableView Int tabview json let func var


效果:

swift tabview 带参数请求网络。多条目展示。json解析,逃逸闭包_swift

用到的第三方

# 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 tabview 带参数请求网络。多条目展示。json解析,逃逸闭包_ide_02

标签:闭包,String,tableView,Int,tabview,json,let,func,var
From: https://blog.51cto.com/u_14523369/6169208

相关文章

  • php关于闭包(匿名函数)的理解
    匿名函数(Anonymousfunctions),也叫闭包函数(closures),允许临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。匿名函数目前是通过 Closure 类来实现的。Example#1匿名函数示例<?phpechopreg_replace_callback('~-([a-z])~',func......
  • Springboot JSON整合—官方原版
    SpringBoot提供与三个JSON映射库的集成:GsonJacksonJSON-BJackson是首选和默认库。一、Jackson提供了Jackson的自动配置,Jackson是springbootstarterjson的一部分。当Jackson在类路径上时,会自动配置一个ObjectMapperbean。提供了几个配置财产,用于自定义ObjectMapper的配置。1.......
  • 第九章:json操作
    第十章json操作目录第十章json操作一、Marshal序列化二、Unmarshal反序列化1已知数据解析2未知数据解析3json测试一、Marshal序列化packagemainimport( "encoding/json" "fmt")typeAnimalstruct{ Namestring`json:"name"` Orderstring`json:"order"......
  • 使用Newtonsoft.Json在Net6中设置时间格式(含T/不含T)
    实例一:JsonSerializerSettingsjsonSettings=newJsonSerializerSettings{DateFormatString="yyyy-MM-ddHH:mm:ss.fff",};Modelmodel=newModel{CreatedAt=DateTime.UtcNow};......
  • fastjson 把json字符串转成对象
    Stringjson="[{\"fid\":0,\"id\":1,\"name\":\"fjk的测试类目一级\"},{\"fid\":1,\"id\":2,\"name\":\"fjk的测试类目二级\"},{\"fid\":88,\"id\":98,\&q......
  • Jackson_json转换工具
                         ......
  • 要用好json,掌握好json的类型
    SON是用于Web上数据交换的最广泛使用的数据格式。它完全独立于语言。基于JavaScript编程语言的一个子集,易于理解和生成。那json的数据类型有哪些?接下来我们就来给大家讲解一下这方面的内容。JSON主要支持6种数据类型:字符串(String):JSON字符串必须用双引号编写,如C语言,JSON中有各......
  • JSON的创建格式和常用方法
       ......
  • site-packages/flask/json/init.py from future import annotations future feature a
    如果在使用Flask库时,出现了“futurefeatureannotationsisnotdefined”的错误,可能是因为Python解释器版本太低。在Python3.7及以下版本中,from__future__importannotations是不支持的,因此需要升级到Python3.8或更高版本。如果升级Python解释器版本不可行,可以......
  • 两种方式自定制基于JWT的认证类BaseAuthentication和BaseJSONWebTokenAuthentication
    1.基于BaseAuthentication的自定义方法  2.views中调用自定义方法MyJwtAuthentication验证  3.基于BaseAuthentication的自定义方法测试:token过期  4.基于BaseAuthentication的自定义方法测试:token数据有错误,需检查token正确性  5.基于BaseAuthenticati......