美文网首页
swift开发笔记:Alamofire+SwiftyJSON配合

swift开发笔记:Alamofire+SwiftyJSON配合

作者: 猫留下你走吧 | 来源:发表于2017-09-01 11:33 被阅读230次

    前言

    前面一个教程:swift开发笔记:使用cocoapods导入第三方框架 中完成了Alamofire和SwiftyJSON两个第三方框架的导入。Alamofire是作为swift的网络请求框架,SwiftyJSON是作为JSON数据解析的框架。两个框架搭配起来,如何配合后台服务器实现完整的服务器请求数据,返回并解析数据,服务我们的app。

    重磅

    本教程将会详细的从:发起网络请求 - 服务器接收请求 -> 访问mysql数据库获取数据 -> 封装json返回 -> 客户端接受数据并解析json

    - 1 - 封装网络请求工具类

    创建文件NetworkTools.swift

    QQ20170901-094203.png

    封装一个工具类,自然是方便我们每次请求数据的时候可以方便一点,我们将网络请求最基本的参数输入,回调的时候直接可以获取到json数据,就无需第二次检验数据格式是否正确之类的操作。大大方便我们的开发。

    //
    //  NetworkTools.swift
    //  MiaoMiao
    //
    //  Created by liwenban on 2017/9/1.
    //  Copyright © 2017年 hellomiao.cn. All rights reserved.
    //
    
    import UIKit
    import Alamofire
    
    //两种网络请求方式: get / post
    enum MethodType {
        case get
        case post
    }
    
    //封装网络请求工具类
    class NetworkTools: NSObject {
        
        //类方法
        class func requestData(URLString : String, type : MethodType, parameters : [String : Any]? = nil, finishedCallback : @escaping( _ result : Any) -> ()) {
            //将枚举类型的get/post转换成http请求的get/post
            let method = type == .get ? HTTPMethod.get : HTTPMethod.post
            //Alamofire请求方法
            Alamofire.request(URLString, method: method, parameters: parameters).responseJSON { (response) in
                //打印数据
                print(response)
                //校检服务器返回的数据类型是否正确
                guard let result = response.result.value else { return }
                //将结果回调出去
                finishedCallback(result)
            }
        }
    }
    

    参数解析:
    URLString:接口地址
    type:http请求方法,最常用的:post/get
    parameters:字典类型,传入的参数。比如登录,服务器肯定需要你传入用户名和密码
    finishedCallback:系统回调,也就是将结果返回给你
    以上都是http请求最基本的,最好百度一下。因为之前学过一点前端,什么post/get还是知道的,如果你不知道,请百度。

    - 2 -客户端UI

    模拟登录操作

    //
    //  ViewController.swift
    //  MiaoMiao
    //
    //  Created by liwenban on 2017/9/1.
    //  Copyright © 2017年 hellomiao.cn. All rights reserved.
    //
    
    import UIKit
    import SwiftyJSON
    
    
    class ViewController: UIViewController {
        
        //拖两个textField控件
        @IBOutlet weak var userTextField: UITextField!
        @IBOutlet weak var passwordTextField: UITextField!
        
        
        override func viewDidLoad() {
            super.viewDidLoad()
            
        }
        
        //按钮点击事件
        @IBAction func toLogin(_ sender: Any) {
            //获取文本输入
            let user = userTextField.text ?? ""
            let password = passwordTextField.text ?? ""
            //待发送参数
            let parameters = ["user" : user, "password" : password]
            //接口地址
            let loginURL = "http://www.hellomiao.cn/demo/login.php"
            //发起网络请求
            NetworkTools.requestData(URLString: loginURL, type: .post, parameters: parameters) { (response : Any) in
                //json数据解析(使用第三方框架SwiftyJSON)
                let msg = JSON(response)["msg"].string ?? ""
                let status = JSON(response)["status"].int ?? -1
                if status == 1 {
                    print("返回信息:\(msg)")
                    //登录成功
                    // ......
                    let nickName = JSON(response)["nickName"].string ?? ""
                    let introduction = JSON(response)["introduction"].string ?? ""
                    let alert = UIAlertController(title:"\(nickName)的自我介绍",message:"\(introduction)", preferredStyle: .alert)
                    let action = UIAlertAction(title:"关闭",style: .default, handler: nil)
                    alert.addAction(action)
                    self.present(alert , animated: true , completion: nil)
                }else if status == 0 {
                    print("返回信息:\(msg)")
                    //登录失败
                    // ......
                }else{
                    
                }
            }
        }
    
    }
    

    参数解析:
    关于接口地址,如果没有像我一样买什么云服务器的话,本地电脑有建立apache服务器,其实也是玩得起真机测试的。满足条件即可:只同一个wifi下,接口地址就是装有apache服务器的电脑的ip地址(登录自己的路由器管理,里面会有当前设备连接的所有ip地址),把php文件扔在你的www目录下,所以你的地址为:http://192.168.1.xxx/login.php
    当然对于一些小白来说看不懂。打个广告:关注我的简书,后续我会找个时间写~

    - 3 - 创建数据库

    这个不讲了,创建一个数据库,再创建一个user表。字段
    我设置了昵称(nickName),账号(user),密码(password),自我介绍(introduction)

    QQ20170901-112823.png
    - 4 - 后台代码(php)

    login.php

    <?php
    $link = mysqli_connect("***你的数据库地址***","***数据库用户名***","***数据库密码***","***你的数据库名***");
    if($link){
        //连接数据库成功
        //接受post过来的参数
        $user = $_POST ['user'];
        $password = $_POST ['password'];
        //设置数据格式为utf-8
        mysqli_query($link,"SET NAMES utf8");
        //定义sql语句
        $sql = "select * from user where user = '$user' and password = '$password'";
        //将结果存入$result
        $result = mysqli_query($link,$sql);
        //结果的元组数
        $num = mysqli_num_rows($result);
        if($num == 1) {
            $response['status'] = 1;
            $response['msg'] = "嗯~用户名和密码正确";
            //获取结果集字段
            $row = mysqli_fetch_array($result);
            $response['introduction'] = $row['introduction'];
            $response['nickName'] = $row['nickName'];
        }else if($num == 0){
            $response['status'] = 0;
            $response['msg'] = "嗯~用户名和密码不正确";
        }else{
            $response['status'] = -1001;
            $response['msg'] = "嗯?怎么可能有两个一摸一样的账号密码";
        }
    }else{
        //数据库连接失败
        $response['status'] = -1000;
        $response['msg'] = "数据库连接失败啦~";
    }
    //将结果以json格式返回回去
    echo json_encode($response);
    //记得关闭数据库
    mysqli_close($link);
    ?>
    

    //参数解析:
    数据库地址:本地一般:localhost,如果端口号不是默认3306就要加上你的端口号:localhost:端口号
    数据库用户名:默认root,为了数据库安全,建议mysql里面新建用户,开放部分权限的用户
    数据库密码:一个用户名肯定对应一个密码
    数据库名:你要操作的数据库的名字(不是表名哦~)

    - 5 -测试验证
    QQ20170901-113058.png

    控制台打印:

    QQ20170901-113229.png

    相关文章

      网友评论

          本文标题:swift开发笔记:Alamofire+SwiftyJSON配合

          本文链接:https://www.haomeiwen.com/subject/xeshjxtx.html