欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

iOS - Swift网络获取数据 ~(更新)

程序员文章站 2024-03-23 09:02:10
...

封装伊始
首先声明一个类继承于AFHTTPSessionManager

class SwiftHttpNetwork: AFHTTPSessionManager

 func setBaseUrl (baseURL:NSString?,timeOutInterval :Double ){
        SwiftHttpNetwork._baseURL = baseURL
        SwiftHttpNetwork.networkManager = SwiftHttpNetwork.init(baseURL:self.baseURL)
       SwiftHttpNetwork.networkManager?.requestSerializer = AFHTTPRequestSerializer()
       SwiftHttpNetwork.networkManager?.responseSerializer = AFJSONResponseSerializer.init()
        // 信任证书
        SwiftHttpNetwork.networkManager?.securityPolicy = AFSecurityPolicy.init(pinningMode: AFSSLPinningMode.none)
        SwiftHttpNetwork.networkManager?.securityPolicy.allowInvalidCertificates = true
        SwiftHttpNetwork.networkManager?.securityPolicy.validatesDomainName = false
        SwiftHttpNetwork.networkManager?.requestSerializer.timeoutInterval = timeOutInterval
        let contentTypes: Set = ["application/json", "text/json", "text/javascript","text/html", "application/x-javascript"]
        SwiftHttpNetwork.networkManager?.responseSerializer.acceptableContentTypes = contentTypes
    }

当你给的图片地址是一个URL时,你需要显示出来就需要去转换编码不然就不能显示的:如下所示

给定的图片地址是一个字符串类型的,所以需要转换为URL如下所示:

转换为URL后还需要转换为NSData类型数据,如下所示

let data = NSData(contentsOfURL: urlStr!),后面带感叹号是用来拆解包的

之后就放入image中,如下所示:

let image = UIImage(data: data!)

整个代码如下所示:


        let urlStr = NSURL(string: "http://img.ivsky.com/img/tupian/pre/201509/13/tianzhukui.jpg")
        let data = NSData(contentsOfURL: urlStr!)
        let image = UIImage(data: data!)
        let imageView = UIImageView(image: image)
        imageView.frame = CGRectMake(0,0,SCR_PAGE.width,SCR_PAGE.height)
        self.view.addSubview(imageView)

iOS - Swift网络获取数据 ~(更新)

---------------在这里面选择添加的数据-------------------

iOS - Swift网络获取数据 ~(更新)

在News文件中添加数据

import UIKit

class News: NSObject {

    var title:String = " "
    var time = " "
    var scr = " "
    var pic = ""
    var content = ""
    var url = ""
    var weburl = ""


}

网络获取:进行数据转换

在文件中进行一些文件的获取


import UIKit

class URLService: NSObject {

    func getJokesData(pagenum:Int,pagesize:Int,sort:String, completion:@escaping (Any,Bool)->Void) ->Void  {

        //get方法
        var urlstr = "http://api.jisuapi.com/xiaohua/text?pagenum=\(pagenum)&pagesize=\(pagesize)&sort=\(sort)&appkey=de394933e1a3e2db"
        urlstr = urlstr.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlFragmentAllowed)!
        let url = URL(string: urlstr)
        let req = URLRequest(url: url!, cachePolicy: .reloadIgnoringCacheData, timeoutInterval: 5.0)

        let task1 : URLSessionDataTask = URLSession.shared.dataTask(with: req) { (data, reponse, error) in
            if error != nil
            {
                completion("服务器错误",false)
                return
            }
            let jsonData = try?
                JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.allowFragments)
            if jsonData == nil
            {
                completion("解析错误",false)
                return
            }

            let status = (jsonData as! NSDictionary).value(forKey: "status") as! String
            let msg = (jsonData as! NSDictionary).value(forKey: "msg") as! String

            if Int(status)! != 0{
                completion(msg,false)
                return
            }
            let result = (jsonData as! NSDictionary).value(forKey: "result") as! NSDictionary

            let list = result.value(forKey: "list") as! NSArray

            var newArr:[News] = []



            for item in list
            {
                let dic = item as! NSDictionary

                let onenew = News()

                onenew.addtime = dic.value(forKey: "addtime")as! String
                onenew.content = dic.value(forKey: "content")as! String

                newArr.append(onenew)

            }
            completion(newArr, true)
        }



        task1.resume()

    }



}

iOS - Swift网络获取数据 ~(更新)

最后在表格中进行展示

在viewcontroll中进行

import UIKit

class ViewController: UIViewController,UITableViewDataSource {

    var table:UITableView?
    var tableDataArr:[News]?





    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if let count = tableDataArr?.count {
            return count
        }
        return 0
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let ID = "cell"
        var cell = tableView.dequeueReusableCell(withIdentifier: ID)
        if cell == nil {
            cell = UITableViewCell.init(style: .subtitle, reuseIdentifier: ID)
        }
        let oneNew = self.tableDataArr![indexPath.row]
        cell?.textLabel?.numberOfLines = 0
        cell?.detailTextLabel?.numberOfLines = 0
        cell?.textLabel?.text = oneNew.content
        cell?.detailTextLabel?.text = oneNew.addtime


        return cell!
    }


    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        UIApplication.shared.isNetworkActivityIndicatorVisible=true

        let urlService = URLService()
        urlService.getJokesData(pagenum: 1, pagesize: 10 , sort:" addtime") { (data, success) in
            DispatchQueue.main.async {
                UIApplication.shared.isNetworkActivityIndicatorVisible = false
            }

            if !success{

                DispatchQueue.main.async {
                    let alertVC = UIAlertController(title: nil, message: data as? String, preferredStyle: .alert)
                    let confinBth = UIAlertAction(title: "确定", style: .default, handler: nil)
                    alertVC . addAction(confinBth)
                    self.present(alertVC, animated: true, completion: nil)

                }
                return

            }

            self.tableDataArr = data as? [News]
            DispatchQueue.main.async {
                self.table?.reloadData()
            }

        }




    }


    override func viewDidLoad() {
        super.viewDidLoad()
        self.title = *****"
        self.table = UITableView.init(frame:self.view.frame , style: .plain)
        self.table?.dataSource = self
        self.view.addSubview(self.table!)

    }

}
//
//  ViewController.m
//  快递查询
//
//  Created by 小红 on 2018/4/2.
//  Copyright © 2018年 小红. All rights reserved.
//

#import "ViewController.h"
#import "AFNetworking.h"
@interface ViewController ()<UITableViewDataSource>
{
    NSArray *_tabledataArr;
}
@property (weak, nonatomic) IBOutlet UITextField *numberTF;
- (IBAction)searchPress:(id)sender;
@property (weak, nonatomic) IBOutlet UITableView *resultTable;
@property (weak, nonatomic) IBOutlet UILabel *statusLabel;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return _tabledataArr.count;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{

    static NSString *aaa@qq.com"cell";
    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:ID];
    if (cell==nil) {
        cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
    }
    NSDictionary *dic=_tabledataArr[indexPath.row];
    cell.textLabel.text=dic[@"time"];
    cell.detailTextLabel.text=dic[@"status"];

    return cell;
}
- (IBAction)searchPress:(id)sender {

    NSString *number=self.numberTF.text;
    //网址字符串
    NSString *aaa@qq.com"http://api.jisuapi.com/express/query";
    AFHTTPSessionManager *manager=[AFHTTPSessionManager manager];
    manager.responseSerializer=[[AFHTTPResponseSerializer alloc] init];
    NSDictionary *aaa@qq.com{
                             @"appkey":@"de394933e1a3e2db",
                             @"type":@"auto",
                             @"number":number
                             };

    [manager POST:urlStr parameters:paramDic success:^(NSURLSessionDataTask *task, id responseObject) {

        NSDictionary *dic=[NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
        NSLog(@"%@",dic);
        if ([dic[@"status"] intValue]!=0) {
            NSLog(@"%@",dic[@"msg"]);
            return ;
        }
        NSDictionary *resulDic=dic[@"result"];
        //得到list数组
        NSArray *listArr=resulDic[@"list"];
        //得到状态数值
        int status=[resulDic[@"deliverystatus"] intValue];

        dispatch_async(dispatch_get_main_queue(), ^{

            _tabledataArr=[listArr copy];
            [self.resultTable reloadData];



        });



    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        NSLog(@"%@",error);
    }];

}

@end
相关标签: Swift 网络获取