swift开发笔记:Alamofire+SwiftyJSON配合服务器完成数据请求与数据解析(含后台源码)

前言

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

重磅

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

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

创建文件NetworkTools.swift

swift开发笔记:Alamofire+SwiftyJSON配合服务器完成数据请求与数据解析(含后台源码)_第1张图片
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)

swift开发笔记:Alamofire+SwiftyJSON配合服务器完成数据请求与数据解析(含后台源码)_第2张图片
QQ20170901-112823.png
- 4 - 后台代码(php)

login.php


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

- 5 -测试验证
swift开发笔记:Alamofire+SwiftyJSON配合服务器完成数据请求与数据解析(含后台源码)_第3张图片
QQ20170901-113058.png

控制台打印:

swift开发笔记:Alamofire+SwiftyJSON配合服务器完成数据请求与数据解析(含后台源码)_第4张图片
QQ20170901-113229.png

你可能感兴趣的:(swift开发笔记:Alamofire+SwiftyJSON配合服务器完成数据请求与数据解析(含后台源码))