第二记- Swift版百思不得姐

商俊智
2023-12-01

今天讲解在子控制器中获取数据,OC中我们用AFN框架请求数据,在Swift中我用的是Alamofire.当然这两个框架的功能差异性不大,并且都是一个作者写的,今天我就讲解如何使用该框架:

 // 请求参数
        let params = NSMutableDictionary()
        params["a"] = "list"
        params["c"] = "data"
        params["type"] = self.Mycard()
        weak var weakSelf = self
        Alamofire.request(.GET, XYrequestUrl, parameters:NSDictionary(dictionary: params) as? [String: AnyObject]).responseJSON() { response in
            
            switch response.result{
            case .Success:
                let JSON = response.result.value
                //得到字典数组数据
                let TextModel = JSON!.valueForKey("list") as? NSArray
                // 字典数组 -> 模型数组
                weakSelf?.dataArr =  XYTextModel.mj_objectArrayWithKeyValuesArray(TextModel)
                // 存储maxtime
                let infoJson  = JSON!["info"]! as? NSDictionary
                weakSelf?.nextData = infoJson!["maxtime"] as? String
                
                // 刷新表格
                weakSelf?.tableView.reloadData()
                // 结束刷新
                weakSelf?.tableView.mj_header.endRefreshing()
            case .Failure(let error):
                
                print(error)
                weakSelf?.tableView.mj_header.endRefreshing()
                
            }
        }

大致请求方式相同,如果是Post就直接将.get改为.Post即可,之后将获取数据在cell中转为模型数据

2:下载图片我用的是Kingfisher

用法1:

 imageUser.kf_setImageWithURL(NSURL(string: selectModel!.profile_image!)!, placeholderImage: UIImage(named: "defaultUserIcon"))
用法2:

<pre name="code" class="objc">    self.progrssImage.setProgress(0.0, animated: false)
            //下载动态图,带进度条
     self.backImage.kf_setImageWithURL(NSURL(string: pictureModel!.middle_image!)!, placeholderImage: UIImage(named: "mine-icon-activity"), optionsInfo: nil, progressBlock: { (receivedSize, totalSize) -> () in
            
            self.buttonImage.hidden = true
            self.titleImage.hidden = false
            //进度比例 设置进度
            let progress = 1.0 * CGFloat(receivedSize) / CGFloat(totalSize)
            self.progrssImage.setProgress(progress, animated: true)
            
            //设置进度文字百分比
            self.progrssImage.hidden = false
            self.progrssImage.progressLabel.textColor = UIColor.redColor()
            self.progrssImage.progressLabel.text = NSString(format:"%.1f%%",progress*100) as String
            self.progrssImage.roundedCorners = 3;
        
            })//图片加载完成之后的回调
             { (image, error, cacheType, imageURL) -> () in
                
                //成功之后的回调
                self.progrssImage.hidden = true
                self.titleImage.hidden = true
                //判断是大图
                if self.pictureModel!.bigImage == 1{
                    // 开启图形上下文
                   UIGraphicsBeginImageContextWithOptions(self.backImage.size, true, 0.0);
                    // 将下载完的image对象绘制到图形上下文
                   let width = self.backImage.width;
                   let height = width * image!.size.height / image!.size.width
                    
                    //绘制一个需要大小的尺寸,把图像画到了当前的image context里
                    image?.drawInRect(CGRectMake(0, 0, width, height))
                    
                    // 获得图片
                    self.backImage.image = UIGraphicsGetImageFromCurrentImageContext()
                    // 结束图形上下文
                    UIGraphicsEndImageContext()
                    //显示Button
                    self.buttonImage.hidden = false
                }else {
                    self.backImage.contentMode = .ScaleToFill
                    self.buttonImage.hidden = true;
                }
            }


 这个方法可以显示下载图片的进度。 

3:字典转模型,我还是喜欢用MJExtension,相信大家都会配置Swift调用OC的桥接

4:显示百分比的进度条

我用的也是OC的DACircularProgress框架,这个框架不仅好用还很强大,简单易懂


好了,今天介绍了四个比较强大实用的框架,差不多精华模块的功能基本都能实现了,

建议cell用一个XIB描述,然后将数据的传递给cell进行赋值,










 类似资料: