博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
10.新浪微博Swift项目第十天
阅读量:6994 次
发布时间:2019-06-27

本文共 3966 字,大约阅读时间需要 13 分钟。

hot3.png

第十天

第十天我们的2个任务, 1. 联系FMDB,但事实上微博是不建议使用数据库存储的, 2. 处理表情键盘和其他细节 下边开始:

FMDB

  1. 使用cocoapods 导入 FMDB

  2. 准备创建表的SQL语句, 如下

    -- 创建微博数据表 --CREATE TABLE IF NOT EXISTS "T_Status" (    "statusId" INTEGER NOT NULL,    "userId" INTEGER NOT NULL,    "status" TEXT,    "createTime" TEXT DEFAULT (datetime('now', 'localtime')),    PRIMARY KEY ("statusId", "userId"));
  3. 创建数据库管理的单例 XQSQLiteManager

    3.1 在初始化的时候,执行SQL创建表

    func createTable() {   // 1.SQL   guard let path = Bundle.main.path(forResource: "status.sql", ofType: nil),       let sql = try?String(contentsOfFile: path) else {           return   }   // 2.执行SQL   queue.inDatabase { (db) in       if db.executeStatements(sql) == true {           print("成功")       }   }   print("voer")}
  4. 添加修改数据库数据的方法

    /// 新增或者修改微博数据func updateStatus(userId:String, array: [[String: AnyObject]]) {    // 1. SQL    let sql = "INSERT OR REPLACE INTO T_Status (statusId, userId, status) VALUES (?, ?, ?);"    // 2. 执行SQL    queue.inTransaction { (db, rollback) in        for dict in array {            // 讲字典序列化成为二进制           guard let statusId = dict["idstr"] as? String ,            let jsonData = try?JSONSerialization.data(withJSONObject: dict, options: []) else {                continue            }           if db.executeUpdate(sql, withArgumentsIn: [statusId, userId, jsonData]) == false {                // 回滚                rollback.pointee = true                break            }        }    }}
  5. 添加从数据库查找数据的方法

    /// 从数据库加载微博数据func loadStatus(userId:String, since_id: Int64 = 0, max_id: Int64 = 0) -> [[String: AnyObject]]  {    // 1.准备sql    var sql = "SELECT statusId, userId, status FROM T_Status \n"    sql += "WHERE userId = \(userId) \n"    if since_id > 0 {        sql += "AND statusId > \(since_id) \n"    }else if max_id > 0{        sql += "AND statusId < \(max_id) \n"    }    sql += "ORDER BY statusId DESC LIMIT 20;"    // 检查sql    // print(sql)    // 2.执行sql    let array = execRecordSet(sql: sql)    // 3.遍历数组,反序列化    var result = [[String: AnyObject]]()    for dict in array {        guard let jsonData = dict["status"] as? Data,            let json = try?JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: AnyObject] else {            continue        }        result.append(json ?? [:])    }    return result}
  6. 新建一个类XQWBStatusListDAL 处理离线数据, 这个类只有一个方法

    class func loadStatus(since_id: Int64 = 0, max_id: Int64 = 0,  completion:@escaping (_ list:[[String:AnyObject]]?, _ isSuccess:Bool)->()) {    // 0. 获取userId    guard let userId = XQWBNetWorkManager.shared.userAccount.uid else {        return    }    // 1. 检查本地数据,如果有 直接返回    let array = XQSQLiteManager.shared.loadStatus(userId: userId, since_id: since_id, max_id: max_id)    // 判断数组数量    if array.count > 0 {        completion(array, true)        return    }    // 2. 如果没有,家在网络数据    XQWBNetWorkManager.shared.statusList(since_id: since_id, max_id: max_id) { (list, isSuccess) in        if !isSuccess {            completion(nil, false)            return        }        guard let list = list else {            completion(nil, isSuccess)            return        }        // 3. 加载完成以后,讲网络数据写入数据库        XQSQLiteManager.shared.updateStatus(userId: userId, array: list)        // 4. 返回网络数据         completion(list, isSuccess)    }}

表情键盘的细节处理

  1. 创建XQWBEmoticonTipView 处理点击表情的时候气泡弹出, 声明一个emoticon属性, 在设置属性的时候处理显示图片和动画
    var emoticon: XQWBEmoticon? {    didSet {        if emoticon == preEmoticon {            return        }        preEmoticon = emoticon        tipBtn.setTitle(emoticon?.emoji, for: .normal)        tipBtn.setImage(emoticon?.image, for: .normal)        // pop 动画        let anim: POPSpringAnimation = POPSpringAnimation(propertyNamed: kPOPLayerPositionY)        anim.fromValue = 30        anim.toValue = 8        anim.springBounciness = 20        anim.springSpeed = 20        tipBtn.layer.pop_add(anim, forKey: nil)    }}

总结

今天我们就把微博项目全部完成了,作为swift的学习项目,实现的还是很不完美,还需要继续努力,项目代码在下边git地址, 想要看的朋友可以下载看一下

往期内容:

转载于:https://my.oschina.net/ozawa4865/blog/1579426

你可能感兴趣的文章