前言
前面一个教程:swift开发笔记:使用cocoapods导入第三方框架 中完成了Alamofire和SwiftyJSON两个第三方框架的导入。Alamofire是作为swift的网络请求框架,SwiftyJSON是作为JSON数据解析的框架。两个框架搭配起来,如何配合后台服务器实现完整的服务器请求数据,返回并解析数据,服务我们的app。
重磅
本教程将会详细的从:发起网络请求 - 服务器接收请求 -> 访问mysql数据库获取数据 -> 封装json返回 -> 客户端接受数据并解析json
- 1 - 封装网络请求工具类
创建文件NetworkTools.swift
封装一个工具类,自然是方便我们每次请求数据的时候可以方便一点,我们将网络请求最基本的参数输入,回调的时候直接可以获取到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)
- 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
网友评论