美文网首页
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